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

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

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

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


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

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__

346 347 348
2) Add k
  $ printf "1\n" > k
  $ hg add k
349 350
  $ hg commit -m "add k"

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

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

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
  reverting a
  diff --git a/a b/a
  1 hunks, 1 lines changed
  examine changes to 'a'? [Ynesfdaq?] y
  
414
  @@ -1,2 +1,1 @@
415
   0
416
  -1
417
  \ No newline at end of file
418
  apply this change to 'a'? [Ynesfdaq?] y
419 420 421 422
  
  $ cat a
  0

423 424 425 426 427 428 429 430 431
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

432
  $ cd ..