test-revert-interactive.t 7.17 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Revert interactive tests
1 add and commit file f
2 add commit file folder1/g
3 add and commit file folder2/h
4 add and commit file folder1/i
5 commit change to file f
6 commit changes to files folder1/g folder2/h
7 commit changes to files folder1/g folder2/h
8 revert interactive to commit id 2 (line 3 above), check that folder1/i is removed and
9 make workdir match 7
10 run the same test than 8 from within folder1 and check same expectations

  $ cat <<EOF >> $HGRCPATH
  > [ui]
  > interactive = true
  > [extensions]
  > record =
18
  > purge = 
19 20 21
  > EOF


22
  $ mkdir -p a/folder1 a/folder2
23 24
  $ cd a
  $ hg init
25 26
  >>> open('f', 'wb').write("1\n2\n3\n4\n5\n")
  $ hg add f ; hg commit -m "adding f"
27 28 29
  $ cat f > folder1/g ; hg add folder1/g ; hg commit -m "adding folder1/g"
  $ cat f > folder2/h ; hg add folder2/h ; hg commit -m "adding folder2/h"
  $ cat f > folder1/i ; hg add folder1/i ; hg commit -m "adding folder1/i"
30 31 32 33 34 35
  >>> open('f', 'wb').write("a\n1\n2\n3\n4\n5\nb\n")
  $ hg commit -m "modifying f"
  >>> open('folder1/g', 'wb').write("c\n1\n2\n3\n4\n5\nd\n")
  $ hg commit -m "modifying folder1/g"
  >>> open('folder2/h', 'wb').write("e\n1\n2\n3\n4\n5\nf\n")
  $ hg commit -m "modifying folder2/h"
36 37 38 39 40 41 42 43 44 45 46 47 48
  $ hg tip
  changeset:   6:59dd6e4ab63a
  tag:         tip
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     modifying folder2/h
  
  $ hg revert -i -r 2 --all -- << EOF
  > y
  > y
  > y
  > y
  > y
49
  > y
50 51 52 53 54 55 56
  > n
  > n
  > EOF
  reverting f
  reverting folder1/g (glob)
  removing folder1/i (glob)
  reverting folder2/h (glob)
57
  remove added file folder1/i (Yn)? y
58
  diff --git a/f b/f
59 60 61
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
62 63
  @@ -1,5 +1,6 @@
  +a
64 65 66 67 68
   1
   2
   3
   4
   5
69
  revert change 1/6 to 'f'? [Ynesfdaq?] y
70
  
71
  @@ -1,5 +2,6 @@
72 73 74 75 76
   1
   2
   3
   4
   5
77
  +b
78
  revert change 2/6 to 'f'? [Ynesfdaq?] y
79
  
80
  diff --git a/folder1/g b/folder1/g
81 82 83
  2 hunks, 2 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
84 85
  @@ -1,5 +1,6 @@
  +c
86 87 88 89 90
   1
   2
   3
   4
   5
91
  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
92
  
93
  @@ -1,5 +2,6 @@
94 95 96 97 98
   1
   2
   3
   4
   5
99
  +d
100
  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
101
  
102
  diff --git a/folder2/h b/folder2/h
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
  2 hunks, 2 lines changed
  examine changes to 'folder2/h'? [Ynesfdaq?] n
  
  $ cat f
  1
  2
  3
  4
  5
  $ cat folder1/g
  1
  2
  3
  4
  5
  d
  $ cat folder2/h
  e
  1
  2
  3
  4
  5
  f
127 128 129 130 131 132

Test that --interactive lift the need for --all

  $ echo q | hg revert -i -r 2
  reverting folder1/g (glob)
  reverting folder2/h (glob)
133
  diff --git a/folder1/g b/folder1/g
134 135 136 137 138
  1 hunks, 1 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] q
  
  abort: user quit
  [255]
139 140 141
  $ ls folder1/
  g

142
Test that a noop revert doesn't do an unnecessary backup
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
  $ (echo y; echo n) | hg revert -i -r 2 folder1/g
  diff --git a/folder1/g b/folder1/g
  1 hunks, 1 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
  @@ -3,3 +3,4 @@
   3
   4
   5
  +d
  revert this change to 'folder1/g'? [Ynesfdaq?] n
  
  $ ls folder1/
  g

Test --no-backup
  $ (echo y; echo y) | hg revert -i -C -r 2 folder1/g
  diff --git a/folder1/g b/folder1/g
  1 hunks, 1 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
  @@ -3,3 +3,4 @@
   3
   4
   5
  +d
  revert this change to 'folder1/g'? [Ynesfdaq?] y
  
  $ ls folder1/
  g
  >>> open('folder1/g', 'wb').write("1\n2\n3\n4\n5\nd\n")
174 175


176 177 178
  $ hg update -C 6
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg revert -i -r 2 --all -- << EOF
179
  > n
180 181 182 183 184 185 186 187 188 189 190 191
  > y
  > y
  > y
  > y
  > y
  > n
  > n
  > EOF
  reverting f
  reverting folder1/g (glob)
  removing folder1/i (glob)
  reverting folder2/h (glob)
192
  remove added file folder1/i (Yn)? n
193
  diff --git a/f b/f
194 195 196
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
197 198
  @@ -1,5 +1,6 @@
  +a
199 200 201 202 203
   1
   2
   3
   4
   5
204
  revert change 1/6 to 'f'? [Ynesfdaq?] y
205
  
206
  @@ -1,5 +2,6 @@
207 208 209 210 211
   1
   2
   3
   4
   5
212
  +b
213
  revert change 2/6 to 'f'? [Ynesfdaq?] y
214
  
215
  diff --git a/folder1/g b/folder1/g
216 217 218
  2 hunks, 2 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
219 220
  @@ -1,5 +1,6 @@
  +c
221 222 223 224 225
   1
   2
   3
   4
   5
226
  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
227
  
228
  @@ -1,5 +2,6 @@
229 230 231 232 233
   1
   2
   3
   4
   5
234
  +d
235
  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
236
  
237
  diff --git a/folder2/h b/folder2/h
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
  2 hunks, 2 lines changed
  examine changes to 'folder2/h'? [Ynesfdaq?] n
  
  $ cat f
  1
  2
  3
  4
  5
  $ cat folder1/g
  1
  2
  3
  4
  5
  d
  $ cat folder2/h
  e
  1
  2
  3
  4
  5
  f
262 263 264 265 266 267 268 269 270
  $ hg st
  M f
  M folder1/g
  $ hg revert --interactive f << EOF
  > y
  > y
  > n
  > n
  > EOF
271
  diff --git a/f b/f
272 273 274
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
275 276
  @@ -1,6 +1,5 @@
  -a
277 278 279 280 281
   1
   2
   3
   4
   5
282
  discard change 1/2 to 'f'? [Ynesfdaq?] y
283
  
284
  @@ -2,6 +1,5 @@
285 286 287 288 289
   1
   2
   3
   4
   5
290
  -b
291
  discard change 2/2 to 'f'? [Ynesfdaq?] n
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
  
  $ hg st
  M f
  M folder1/g
  ? f.orig
  $ cat f
  a
  1
  2
  3
  4
  5
  $ cat f.orig
  1
  2
  3
  4
  5
310 311
  $ rm f.orig
  $ hg update -C .
312
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
313 314 315 316 317 318 319 320 321

Check editing files newly added by a revert

1) Create a dummy editor changing 1 to 42
  $ cat > $TESTTMP/editor.sh << '__EOF__'
  > cat "$1"  | sed "s/1/42/g"  > tt
  > mv tt  "$1"
  > __EOF__

322 323 324
2) Add k
  $ printf "1\n" > k
  $ hg add k
325 326
  $ hg commit -m "add k"

327 328 329
3) Use interactive revert with editing (replacing +1 with +42):
  $ printf "0\n2\n" > k
  $ HGEDITOR="\"sh\" \"${TESTTMP}/editor.sh\"" hg revert -i  <<EOF
330 331 332
  > y
  > e
  > EOF
333 334 335 336
  reverting k
  diff --git a/k b/k
  1 hunks, 2 lines changed
  examine changes to 'k'? [Ynesfdaq?] y
337
  
338 339 340 341
  @@ -1,1 +1,2 @@
  -1
  +0
  +2
342
  discard this change to 'k'? [Ynesfdaq?] e
343
  
344
  $ cat k
345
  42
346 347 348 349

Check the experimental config to invert the selection:
  $ cat <<EOF >> $HGRCPATH
  > [experimental]
350
  > revertalternateinteractivemode=False
351 352 353 354 355 356 357
  > EOF


  $ hg up -C .
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ printf 'firstline\nc\n1\n2\n3\n 3\n5\nd\nlastline\n' > folder1/g
  $ hg diff --nodates
358
  diff -r a3d963a027aa folder1/g
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
  --- a/folder1/g
  +++ b/folder1/g
  @@ -1,7 +1,9 @@
  +firstline
   c
   1
   2
   3
  -4
  + 3
   5
   d
  +lastline
  $ hg revert -i <<EOF
  > y
  > y
  > y
  > n
  > EOF
  reverting folder1/g (glob)
  diff --git a/folder1/g b/folder1/g
  3 hunks, 3 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
383 384
  @@ -1,4 +1,5 @@
  +firstline
385 386 387 388
   c
   1
   2
   3
389
  discard change 1/3 to 'folder1/g'? [Ynesfdaq?] y
390
  
391
  @@ -1,7 +2,7 @@
392 393 394 395
   c
   1
   2
   3
396 397
  -4
  + 3
398 399
   5
   d
400
  discard change 2/3 to 'folder1/g'? [Ynesfdaq?] y
401
  
402
  @@ -6,2 +7,3 @@
403 404
   5
   d
405
  +lastline
406
  discard change 3/3 to 'folder1/g'? [Ynesfdaq?] n
407 408
  
  $ hg diff --nodates
409
  diff -r a3d963a027aa folder1/g
410 411 412 413 414 415 416
  --- a/folder1/g
  +++ b/folder1/g
  @@ -5,3 +5,4 @@
   4
   5
   d
  +lastline
417 418 419 420 421 422 423 424 425 426 427 428

  $ hg update -C .
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg purge
  $ touch newfile
  $ hg add newfile
  $ hg status
  A newfile
  $ hg revert -i <<EOF
  > n
  > EOF
  forgetting newfile
429
  forget added file newfile (Yn)? n
430 431 432 433 434 435
  $ hg status
  A newfile
  $ hg revert -i <<EOF
  > y
  > EOF
  forgetting newfile
436
  forget added file newfile (Yn)? y
437 438 439
  $ hg status
  ? newfile