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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
|
#!/bin/sh
test_description='Test "stg pop --spill"'
. ./test-lib.sh
stg init
reset_test () {
stg reset --hard
stg push -a
}
test_expect_success 'Create a few patches' '
for i in 0 1 2; do
stg new p$i -m p$i &&
echo "patch$i" >> p.txt &&
stg add p.txt &&
stg refresh
done &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ]
'
test_expect_success 'Attempt to spill non-topmost patch' '
command_error stg pop --spill p0 2>&1 |
grep -e "Can only spill topmost applied patches"
'
test_expect_success 'Pop a patch, keeping its modifications in the tree' '
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
test_expect_success 'Pop another patch, keeping this patch modifications in the tree' '
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
test_expect_success 'Pop last patch, keeping its modifications in the tree' '
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
test_expect_code 2 'Try to pop from an empty stack' '
stg pop --spill
'
reset_test
test_expect_success 'Pop all patches, keeping modifications in the tree' '
stg pop --spill --all &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
reset_test
test_expect_success 'Pop zero patch, keeping modifications in the tree' '
stg pop --spill -n 0 &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
# No need, nothing popped
#reset_test
test_expect_success 'Pop one single patch, keeping modifications in the tree' '
stg pop --spill -n 1 &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
reset_test
test_expect_success 'Pop all but one patch, keeping modifications in the tree' '
stg pop --spill -n -1 &&
[ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
reset_test
test_expect_success 'Pop more than stack length, keeping modifications in the tree' '
stg pop --spill -n 3 &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
reset_test
test_expect_success 'Pop more than stack length, keeping modifications in the tree' '
stg pop --spill -n 4 &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
reset_test
test_expect_code 2 'Pop all but more than stack length, keeping modifications in the tree' '
stg pop --spill -n -4 &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
'
# No need, nothing popped
#reset_test
test_expect_success 'Create a few patches that touch separate files' '
stg delete .. &&
for i in 0 1 2; do
stg new p$i -m p$i &&
echo "patch$i" >> p$i.txt &&
stg add p$i.txt &&
stg refresh
done &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ]
'
test_expect_success 'Pop patches that touch separate files' '
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
[ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ] &&
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
[ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ] &&
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ]
'
test_expect_success 'Create a few patches that touch the same lines in a file' '
stg delete .. &&
for i in 0 1 2; do
stg new p$i -m p$i &&
echo "patch$i" > p.txt &&
stg add p.txt &&
stg refresh
done &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(cat p.txt))" = "patch2" ]
'
test_expect_success 'Pop patches that all touch the same lines in a file' '
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
[ "$(echo $(cat p.txt))" = "patch2" ] &&
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch2" ] &&
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(cat p.txt))" = "patch2" ]
'
test_expect_success 'Pop an empty patch' '
stg delete .. &&
echo "spillemptypatch" > p.txt &&
git add p.txt &&
git commit -m spillempty p.txt &&
stg new spillempty -m spillempty &&
stg refresh &&
[ "$(echo $(stg series --applied --noprefix))" = "spillempty" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(cat p.txt))" = "spillemptypatch" ] &&
stg pop --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "spillempty" ] &&
[ "$(echo $(cat p.txt))" = "spillemptypatch" ]
'
# Spill with uncommitted modifs
# Tests adapted from t1204-pop-keep.sh
test_expect_success 'Create a few patches & make some non-conflicting local changes' '
git reset --hard &&
stg delete .. &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ]
for i in 0 1 2; do
stg new p$i -m p$i &&
echo "patch$i" >> patch$i.txt &&
stg add patch$i.txt &&
stg refresh
done &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ]
echo "local" >> patch0.txt
'
test_expect_success 'Pop two patches, keeping local changes' '
stg pop -n 2 --keep --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
[ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
[ "$(echo $(cat patch0.txt))" = "patch0 local" ] &&
[ "$(echo $(cat patch?.txt))" = "patch0 local patch1 patch2" ]
'
test_expect_success 'Pop remaining patch, keeping local changes' '
stg pop --keep --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
[ "$(echo $(cat patch0.txt))" = "patch0 local" ] &&
[ "$(echo $(cat patch?.txt))" = "patch0 local patch1 patch2" ]
'
test_expect_success 'Reset repository' '
git reset --hard &&
[ "$(echo $(stg series --applied --noprefix))" = "" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(ls patch?.txt 2> /dev/null))" = "" ]
'
test_expect_success 'Push patches again' '
stg push -a &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
[ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
[ "$(echo $(cat patch0.txt))" = "patch0" ] &&
[ "$(echo $(cat patch?.txt))" = "patch0 patch1 patch2" ]
'
test_expect_success 'Pop a patch without local changes' '
stg pop --keep --spill &&
[ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
[ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
[ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
[ "$(echo $(cat patch0.txt))" = "patch0" ] &&
[ "$(echo $(cat patch?.txt))" = "patch0 patch1 patch2" ]
'
test_done
|