test-revert-interactive.t 7.66 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 447

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
  $ cd ..