test-revert-interactive.t 8.43 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
  >>> open('f', 'wb').write(b"1\n2\n3\n4\n5\n") and None
26
  $ 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
  >>> open('f', 'wb').write(b"a\n1\n2\n3\n4\n5\nb\n") and None
31
  $ hg commit -m "modifying f"
32
  >>> open('folder1/g', 'wb').write(b"c\n1\n2\n3\n4\n5\nd\n") and None
33
  $ hg commit -m "modifying folder1/g"
34
  >>> open('folder2/h', 'wb').write(b"e\n1\n2\n3\n4\n5\nf\n") and None
35
  $ 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
  > ?
50
  > y
51 52 53
  > n
  > n
  > EOF
54
  remove added file folder1/i (Yn)? y
55
  removing folder1/i
56
  diff --git a/f b/f
57 58 59
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
60 61
  @@ -1,6 +1,5 @@
  -a
62 63 64 65 66
   1
   2
   3
   4
   5
67
  apply change 1/6 to 'f'? [Ynesfdaq?] y
68
  
69
  @@ -2,6 +1,5 @@
70 71 72 73 74
   1
   2
   3
   4
   5
75 76
  -b
  apply change 2/6 to 'f'? [Ynesfdaq?] y
77
  
78
  diff --git a/folder1/g b/folder1/g
79 80 81
  2 hunks, 2 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
82 83
  @@ -1,6 +1,5 @@
  -c
84 85 86 87 88
   1
   2
   3
   4
   5
89
  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
90
  
91
  y - yes, apply this change
92 93 94
  n - no, skip this change
  e - edit this change manually
  s - skip remaining changes to this file
95
  f - apply remaining changes to this file
96
  d - done, skip remaining changes and files
97 98
  a - apply all changes to all remaining files
  q - quit, applying no changes
99
  ? - ? (display help)
100
  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
101
  
102
  @@ -2,6 +1,5 @@
103 104 105 106 107
   1
   2
   3
   4
   5
108 109
  -d
  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
110
  
111
  diff --git a/folder2/h b/folder2/h
112 113 114
  2 hunks, 2 lines changed
  examine changes to 'folder2/h'? [Ynesfdaq?] n
  
115
  reverting f
116
  reverting folder1/g
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
  $ 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
138 139 140 141

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

  $ echo q | hg revert -i -r 2
142
  diff --git a/folder1/g b/folder1/g
143 144 145 146 147
  1 hunks, 1 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] q
  
  abort: user quit
  [255]
148 149 150
  $ ls folder1/
  g

151
Test that a noop revert doesn't do an unnecessary backup
152 153 154 155 156
  $ (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
  
157
  @@ -3,4 +3,3 @@
158 159 160
   3
   4
   5
161 162
  -d
  apply this change to 'folder1/g'? [Ynesfdaq?] n
163 164 165 166 167 168 169 170 171 172
  
  $ 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
  
173
  @@ -3,4 +3,3 @@
174 175 176
   3
   4
   5
177 178
  -d
  apply this change to 'folder1/g'? [Ynesfdaq?] y
179 180 181
  
  $ ls folder1/
  g
182
  >>> open('folder1/g', 'wb').write(b"1\n2\n3\n4\n5\nd\n") and None
183 184


185 186 187
  $ hg update -C 6
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg revert -i -r 2 --all -- << EOF
188
  > n
189 190 191 192 193 194 195 196
  > y
  > y
  > y
  > y
  > y
  > n
  > n
  > EOF
197
  remove added file folder1/i (Yn)? n
198
  diff --git a/f b/f
199 200 201
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
202 203
  @@ -1,6 +1,5 @@
  -a
204 205 206 207 208
   1
   2
   3
   4
   5
209
  apply change 1/6 to 'f'? [Ynesfdaq?] y
210
  
211
  @@ -2,6 +1,5 @@
212 213 214 215 216
   1
   2
   3
   4
   5
217 218
  -b
  apply change 2/6 to 'f'? [Ynesfdaq?] y
219
  
220
  diff --git a/folder1/g b/folder1/g
221 222 223
  2 hunks, 2 lines changed
  examine changes to 'folder1/g'? [Ynesfdaq?] y
  
224 225
  @@ -1,6 +1,5 @@
  -c
226 227 228 229 230
   1
   2
   3
   4
   5
231
  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
232
  
233
  @@ -2,6 +1,5 @@
234 235 236 237 238
   1
   2
   3
   4
   5
239 240
  -d
  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
241
  
242
  diff --git a/folder2/h b/folder2/h
243 244 245
  2 hunks, 2 lines changed
  examine changes to 'folder2/h'? [Ynesfdaq?] n
  
246
  reverting f
247
  reverting folder1/g
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
  $ 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
269 270 271 272 273
  $ hg st
  M f
  M folder1/g
  $ hg revert --interactive f << EOF
  > y
274
  > ?
275 276 277 278
  > y
  > n
  > n
  > EOF
279
  diff --git a/f b/f
280 281 282
  2 hunks, 2 lines changed
  examine changes to 'f'? [Ynesfdaq?] y
  
283 284
  @@ -1,6 +1,5 @@
  -a
285 286 287 288 289
   1
   2
   3
   4
   5
290 291 292 293 294 295 296 297 298 299 300
  discard change 1/2 to 'f'? [Ynesfdaq?] ?
  
  y - yes, discard this change
  n - no, skip this change
  e - edit this change manually
  s - skip remaining changes to this file
  f - discard remaining changes to this file
  d - done, skip remaining changes and files
  a - discard all changes to all remaining files
  q - quit, discarding no changes
  ? - ? (display help)
301
  discard change 1/2 to 'f'? [Ynesfdaq?] y
302
  
303
  @@ -2,6 +1,5 @@
304 305 306 307 308
   1
   2
   3
   4
   5
309
  -b
310
  discard change 2/2 to 'f'? [Ynesfdaq?] n
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
  
  $ 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
329 330
  $ rm f.orig
  $ hg update -C .
331
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
332 333 334 335 336 337 338 339 340

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__

341 342 343
2) Add k
  $ printf "1\n" > k
  $ hg add k
344 345
  $ hg commit -m "add k"

346 347 348
3) Use interactive revert with editing (replacing +1 with +42):
  $ printf "0\n2\n" > k
  $ HGEDITOR="\"sh\" \"${TESTTMP}/editor.sh\"" hg revert -i  <<EOF
349 350 351
  > y
  > e
  > EOF
352 353 354
  diff --git a/k b/k
  1 hunks, 2 lines changed
  examine changes to 'k'? [Ynesfdaq?] y
355
  
356 357 358 359
  @@ -1,1 +1,2 @@
  -1
  +0
  +2
360
  discard this change to 'k'? [Ynesfdaq?] e
361
  
362
  reverting k
363
  $ cat k
364
  42
365

366 367 368 369 370 371 372 373 374 375
  $ 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
376
  forget added file newfile (Yn)? n
377 378 379 380 381
  $ hg status
  A newfile
  $ hg revert -i <<EOF
  > y
  > EOF
382
  forget added file newfile (Yn)? y
383
  forgetting newfile
384 385
  $ hg status
  ? newfile
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406

When a line without EOL is selected during "revert -i" (issue5651)

  $ hg init $TESTTMP/revert-i-eol
  $ cd $TESTTMP/revert-i-eol
  $ echo 0 > a
  $ hg ci -qAm 0
  $ printf 1 >> a
  $ hg ci -qAm 1
  $ cat a
  0
  1 (no-eol)

  $ hg revert -ir'.^' <<EOF
  > y
  > y
  > EOF
  diff --git a/a b/a
  1 hunks, 1 lines changed
  examine changes to 'a'? [Ynesfdaq?] y
  
407
  @@ -1,2 +1,1 @@
408
   0
409
  -1
410
  \ No newline at end of file
411
  apply this change to 'a'? [Ynesfdaq?] y
412
  
413
  reverting a
414 415 416
  $ cat a
  0

417 418 419 420 421 422 423 424 425
When specified pattern does not exist, we should exit early (issue5789).

  $ hg files
  a
  $ hg rev b
  b: no such file in rev b40d1912accf
  $ hg rev -i b
  b: no such file in rev b40d1912accf

426
  $ cd ..
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446

Prompt before undeleting file(issue6008)
  $ hg init repo
  $ cd repo
  $ echo a > a
  $ hg ci -qAm a
  $ hg rm a
  $ hg revert -i<<EOF
  > y
  > EOF
  add back removed file a (Yn)? y
  undeleting a
  $ ls
  a
  $ hg rm a
  $ hg revert -i<<EOF
  > n
  > EOF
  add back removed file a (Yn)? n
  $ ls
447 448
  $ hg revert -a
  undeleting a
449
  $ cd ..
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495

Test "keep" mode

  $ cat <<EOF >> $HGRCPATH
  > [experimental]
  > revert.interactive.select-to-keep = true
  > EOF

  $ cd repo
  $ printf "x\na\ny\n" > a
  $ hg diff
  diff -r cb9a9f314b8b a
  --- a/a	Thu Jan 01 00:00:00 1970 +0000
  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
  @@ -1,1 +1,3 @@
  +x
   a
  +y
  $ cat > $TESTTMP/editor.sh << '__EOF__'
  > echo "+new line" >> "$1"
  > __EOF__

  $ HGEDITOR="\"sh\" \"${TESTTMP}/editor.sh\"" hg revert -i  <<EOF
  > y
  > n
  > e
  > EOF
  diff --git a/a b/a
  2 hunks, 2 lines changed
  examine changes to 'a'? [Ynesfdaq?] y
  
  @@ -1,1 +1,2 @@
  +x
   a
  keep change 1/2 to 'a'? [Ynesfdaq?] n
  
  @@ -1,1 +2,2 @@
   a
  +y
  keep change 2/2 to 'a'? [Ynesfdaq?] e
  
  reverting a
  $ cat a
  a
  y
  new line