tg.sh: handle help -h
[topgit/pro.git] / t / t5010-update-local.sh
blobb7bafeeecfbcb4e13e9dfee140e2ab5da5c39466
1 #!/bin/sh
3 test_description='tg update non-remote branches'
5 TEST_NO_CREATE_REPO=1
7 . ./test-lib.sh
9 test_plan 8
11 uctmp="$(test_get_temp update-check)" || die
13 branch_is_up_to_date() {
14 needs_update_check "$@" >"$uctmp" &&
16 read -r uc_processed &&
17 read -r uc_behind &&
18 read -r uc_ahead &&
19 read -r uc_partial
20 } <"$uctmp" &&
21 test z"$uc_behind" = z":"
24 test_expect_success 'setup' '
25 test_create_repo pristine &&
26 cd pristine &&
27 git checkout --orphan release &&
28 git read-tree --empty &&
29 git reset --hard &&
30 test_commit "release~1" &&
31 tg_test_create_branches <<-EOT &&
32 t/patch1 [PATCH] alpha patch
33 release
35 t/patch2 [PATCH] beta patch
36 release
37 EOT
38 git checkout -f t/patch1 &&
39 test_commit "alpha~1" &&
40 git checkout -f t/patch2 &&
41 test_commit "beta~1" &&
42 tg_test_create_branch t/int -m "[INTERMEDIATE] extra level" t/patch2 &&
43 tg_test_create_branch stage -m "[STAGE] staging branch" release t/patch1 t/int &&
44 test_must_fail branch_is_up_to_date stage &&
45 git symbolic-ref HEAD "$(tg --top-bases)/stage" &&
46 git reset --hard &&
47 git rm --force --ignore-unmatch -- .topmsg .topdeps &&
48 git read-tree -m release t/patch1 t/int &&
49 git rm --force --ignore-unmatch -- .topmsg .topdeps &&
50 newtree="$(git write-tree)" && test -n "$newtree" &&
51 test_tick &&
52 newcommit="$(git commit-tree -p HEAD -p t/patch1 -p t/int -m "mighty octopus" "$newtree")" &&
53 test -n "$newcommit" && git update-ref HEAD "$newcommit" HEAD &&
54 git checkout -f stage &&
55 test_tick &&
56 git merge -m "bases up" "$(tg --top-bases)/stage" &&
57 branch_is_up_to_date stage &&
58 git gc --aggressive --prune=now
61 test_expect_success 'non-tgish dep' '
62 cp -pR pristine nontgish &&
63 cd nontgish &&
64 git checkout -f release &&
65 echo "amend" >> "release~1.t" &&
66 git add -u &&
67 test_tick &&
68 git commit -m "amend file" &&
69 test_must_fail branch_is_up_to_date stage &&
70 tg update stage &&
71 branch_is_up_to_date stage &&
72 git diff --exit-code release:release~1.t stage:release~1.t
75 test_expect_success 'level 1 dep' '
76 cp -pR pristine level1 &&
77 cd level1 &&
78 git checkout -f t/patch1 &&
79 echo "amend alpha" >> "alpha~1.t" &&
80 git add -u &&
81 test_tick &&
82 git commit -m "amend alpha" &&
83 test_must_fail branch_is_up_to_date stage &&
84 tg update stage &&
85 branch_is_up_to_date stage &&
86 git diff --exit-code t/patch1:alpha~1.t stage:alpha~1.t
89 test_expect_success 'level 2 dep' '
90 cp -pR pristine level2 &&
91 cd level2 &&
92 git checkout -f t/patch2 &&
93 echo "amend beta" >> "beta~1.t" &&
94 git add -u &&
95 test_tick &&
96 git commit -m "amend beta" &&
97 test_must_fail branch_is_up_to_date stage &&
98 tg update stage &&
99 branch_is_up_to_date stage &&
100 git diff --exit-code t/patch2:beta~1.t stage:beta~1.t
103 test_expect_success 'level 1 base' '
104 cp -pR pristine level1base &&
105 cd level1base &&
106 git symbolic-ref HEAD "$(tg --top-bases)/t/patch1" &&
107 git reset --hard &&
108 echo "amend release" >> "release~1.t" &&
109 git add -u &&
110 test_tick &&
111 git commit -m "amend release on t/patch1 base" &&
112 git tag newrelease &&
113 test_must_fail branch_is_up_to_date stage &&
114 tg update stage &&
115 branch_is_up_to_date stage &&
116 test_must_fail git diff --exit-code release:release~1.t stage:release~1.t &&
117 git diff --exit-code newrelease:release~1.t stage:release~1.t
120 test_expect_success 'level 2 base' '
121 cp -pR pristine level2base &&
122 cd level2base &&
123 git symbolic-ref HEAD "$(tg --top-bases)/t/patch2" &&
124 git reset --hard &&
125 echo "amend release" >> "release~1.t" &&
126 git add -u &&
127 test_tick &&
128 git commit -m "amend release on t/patch2 base" &&
129 git tag newrelease &&
130 test_must_fail branch_is_up_to_date stage &&
131 tg update stage &&
132 branch_is_up_to_date stage &&
133 test_must_fail git diff --exit-code release:release~1.t stage:release~1.t &&
134 git diff --exit-code newrelease:release~1.t stage:release~1.t
137 test_expect_success 'intermediate base' '
138 cp -pR pristine intbase &&
139 cd intbase &&
140 git symbolic-ref HEAD "$(tg --top-bases)/t/int" &&
141 git reset --hard &&
142 echo "amend beta" >> "beta~1.t" &&
143 git add -u &&
144 test_tick &&
145 git commit -m "amend beta on t/int base" &&
146 git tag newbeta &&
147 test_must_fail branch_is_up_to_date stage &&
148 tg update stage &&
149 branch_is_up_to_date stage &&
150 test_must_fail git diff --exit-code t/patch2:beta~1.t stage:beta~1.t &&
151 git diff --exit-code newbeta:beta~1.t stage:beta~1.t
154 test_expect_success 'stage base' '
155 cp -pR pristine stagebase &&
156 cd stagebase &&
157 git symbolic-ref HEAD "$(tg --top-bases)/stage" &&
158 git reset --hard &&
159 echo "amend alpha" >> "alpha~1.t" &&
160 git add -u &&
161 test_tick &&
162 git commit -m "amend alpha on stage base" &&
163 git tag newalpha &&
164 test_must_fail branch_is_up_to_date stage &&
165 tg update stage &&
166 branch_is_up_to_date stage &&
167 test_must_fail git diff --exit-code t/patch1:alpha~1.t stage:alpha~1.t &&
168 git diff --exit-code newalpha:alpha~1.t stage:alpha~1.t
171 test_done