##// END OF EJS Templates
tests: show that in-mem rebase does not find path dir/file conflicts...
Martin von Zweigbergk -
r40838:e204d9a2 stable
parent child Browse files
Show More
@@ -1,684 +1,694 b''
1 1 #require symlink execbit
2 2 $ cat << EOF >> $HGRCPATH
3 3 > [phases]
4 4 > publish=False
5 5 > [extensions]
6 6 > amend=
7 7 > rebase=
8 8 > debugdrawdag=$TESTDIR/drawdag.py
9 9 > strip=
10 10 > [rebase]
11 11 > experimental.inmemory=1
12 12 > [diff]
13 13 > git=1
14 14 > [alias]
15 15 > tglog = log -G --template "{rev}: {node|short} '{desc}'\n"
16 16 > EOF
17 17
18 18 Rebase a simple DAG:
19 19 $ hg init repo1
20 20 $ cd repo1
21 21 $ hg debugdrawdag <<'EOS'
22 22 > c b
23 23 > |/
24 24 > d
25 25 > |
26 26 > a
27 27 > EOS
28 28 $ hg up -C a
29 29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
30 30 $ hg tglog
31 31 o 3: 814f6bd05178 'c'
32 32 |
33 33 | o 2: db0e82a16a62 'b'
34 34 |/
35 35 o 1: 02952614a83d 'd'
36 36 |
37 37 @ 0: b173517d0057 'a'
38 38
39 39 $ hg cat -r 3 c
40 40 c (no-eol)
41 41 $ hg cat -r 2 b
42 42 b (no-eol)
43 43 $ hg rebase --debug -r b -d c | grep rebasing
44 44 rebasing in-memory
45 45 rebasing 2:db0e82a16a62 "b" (b)
46 46 $ hg tglog
47 47 o 3: ca58782ad1e4 'b'
48 48 |
49 49 o 2: 814f6bd05178 'c'
50 50 |
51 51 o 1: 02952614a83d 'd'
52 52 |
53 53 @ 0: b173517d0057 'a'
54 54
55 55 $ hg cat -r 3 b
56 56 b (no-eol)
57 57 $ hg cat -r 2 c
58 58 c (no-eol)
59 59
60 60 Case 2:
61 61 $ hg init repo2
62 62 $ cd repo2
63 63 $ hg debugdrawdag <<'EOS'
64 64 > c b
65 65 > |/
66 66 > d
67 67 > |
68 68 > a
69 69 > EOS
70 70
71 71 Add a symlink and executable file:
72 72 $ hg up -C c
73 73 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
74 74 $ ln -s somefile e
75 75 $ echo f > f
76 76 $ chmod +x f
77 77 $ hg add e f
78 78 $ hg amend -q
79 79 $ hg up -Cq a
80 80
81 81 Write files to the working copy, and ensure they're still there after the rebase
82 82 $ echo "abc" > a
83 83 $ ln -s def b
84 84 $ echo "ghi" > c
85 85 $ echo "jkl" > d
86 86 $ echo "mno" > e
87 87 $ hg tglog
88 88 o 3: f56b71190a8f 'c'
89 89 |
90 90 | o 2: db0e82a16a62 'b'
91 91 |/
92 92 o 1: 02952614a83d 'd'
93 93 |
94 94 @ 0: b173517d0057 'a'
95 95
96 96 $ hg cat -r 3 c
97 97 c (no-eol)
98 98 $ hg cat -r 2 b
99 99 b (no-eol)
100 100 $ hg cat -r 3 e
101 101 somefile (no-eol)
102 102 $ hg rebase --debug -s b -d a | grep rebasing
103 103 rebasing in-memory
104 104 rebasing 2:db0e82a16a62 "b" (b)
105 105 $ hg tglog
106 106 o 3: fc055c3b4d33 'b'
107 107 |
108 108 | o 2: f56b71190a8f 'c'
109 109 | |
110 110 | o 1: 02952614a83d 'd'
111 111 |/
112 112 @ 0: b173517d0057 'a'
113 113
114 114 $ hg cat -r 2 c
115 115 c (no-eol)
116 116 $ hg cat -r 3 b
117 117 b (no-eol)
118 118 $ hg rebase --debug -s 1 -d 3 | grep rebasing
119 119 rebasing in-memory
120 120 rebasing 1:02952614a83d "d" (d)
121 121 rebasing 2:f56b71190a8f "c"
122 122 $ hg tglog
123 123 o 3: 753feb6fd12a 'c'
124 124 |
125 125 o 2: 09c044d2cb43 'd'
126 126 |
127 127 o 1: fc055c3b4d33 'b'
128 128 |
129 129 @ 0: b173517d0057 'a'
130 130
131 131 Ensure working copy files are still there:
132 132 $ cat a
133 133 abc
134 134 $ readlink.py b
135 135 b -> def
136 136 $ cat e
137 137 mno
138 138
139 139 Ensure symlink and executable files were rebased properly:
140 140 $ hg up -Cq 3
141 141 $ readlink.py e
142 142 e -> somefile
143 143 $ ls -l f | cut -c -10
144 144 -rwxr-xr-x
145 145
146 146 Rebase the working copy parent
147 147 $ hg up -C 3
148 148 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 149 $ hg rebase -r 3 -d 0 --debug | grep rebasing
150 150 rebasing in-memory
151 151 rebasing 3:753feb6fd12a "c" (tip)
152 152 $ hg tglog
153 153 @ 3: 844a7de3e617 'c'
154 154 |
155 155 | o 2: 09c044d2cb43 'd'
156 156 | |
157 157 | o 1: fc055c3b4d33 'b'
158 158 |/
159 159 o 0: b173517d0057 'a'
160 160
161 161
162 162 Test reporting of path conflicts
163 163
164 164 $ hg rm a
165 165 $ mkdir a
166 166 $ touch a/a
167 167 $ hg ci -Am "a/a"
168 168 adding a/a
169 169 $ hg tglog
170 170 @ 4: daf7dfc139cb 'a/a'
171 171 |
172 172 o 3: 844a7de3e617 'c'
173 173 |
174 174 | o 2: 09c044d2cb43 'd'
175 175 | |
176 176 | o 1: fc055c3b4d33 'b'
177 177 |/
178 178 o 0: b173517d0057 'a'
179 179
180 180 $ hg rebase -r . -d 2
181 181 rebasing 4:daf7dfc139cb "a/a" (tip)
182 182 saved backup bundle to $TESTTMP/repo1/repo2/.hg/strip-backup/daf7dfc139cb-fdbfcf4f-rebase.hg
183 183
184 184 $ hg tglog
185 185 @ 4: c6ad37a4f250 'a/a'
186 186 |
187 187 | o 3: 844a7de3e617 'c'
188 188 | |
189 189 o | 2: 09c044d2cb43 'd'
190 190 | |
191 191 o | 1: fc055c3b4d33 'b'
192 192 |/
193 193 o 0: b173517d0057 'a'
194 194
195 195 $ echo foo > foo
196 196 $ hg ci -Aqm "added foo"
197 197 $ hg up '.^'
198 198 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
199 199 $ echo bar > bar
200 200 $ hg ci -Aqm "added bar"
201 201 $ hg rm a/a
202 202 $ echo a > a
203 203 $ hg ci -Aqm "added a back!"
204 204 $ hg tglog
205 205 @ 7: 855e9797387e 'added a back!'
206 206 |
207 207 o 6: d14530e5e3e6 'added bar'
208 208 |
209 209 | o 5: 9b94b9373deb 'added foo'
210 210 |/
211 211 o 4: c6ad37a4f250 'a/a'
212 212 |
213 213 | o 3: 844a7de3e617 'c'
214 214 | |
215 215 o | 2: 09c044d2cb43 'd'
216 216 | |
217 217 o | 1: fc055c3b4d33 'b'
218 218 |/
219 219 o 0: b173517d0057 'a'
220 220
221 221 $ hg rebase -r . -d 5
222 222 rebasing 7:855e9797387e "added a back!" (tip)
223 223 saved backup bundle to $TESTTMP/repo1/repo2/.hg/strip-backup/855e9797387e-81ee4c5d-rebase.hg
224 224
225 225 $ hg tglog
226 226 @ 7: bb3f02be2688 'added a back!'
227 227 |
228 228 | o 6: d14530e5e3e6 'added bar'
229 229 | |
230 230 o | 5: 9b94b9373deb 'added foo'
231 231 |/
232 232 o 4: c6ad37a4f250 'a/a'
233 233 |
234 234 | o 3: 844a7de3e617 'c'
235 235 | |
236 236 o | 2: 09c044d2cb43 'd'
237 237 | |
238 238 o | 1: fc055c3b4d33 'b'
239 239 |/
240 240 o 0: b173517d0057 'a'
241 241
242 $ mkdir c
243 $ echo c > c/c
244 $ hg add c/c
245 $ hg ci -m 'c/c'
246 BROKEN: This should be a conflict, should not crash
247 $ hg rebase -r . -d 3 -n 2>&1 | grep KeyError
248 KeyError: 'c'
249 BROKEN: This should be a conflict, should not crash
250 $ hg rebase -r 3 -d . -n 2>&1 | grep KeyError
251 KeyError: 'c/c'
242 252
243 253 $ cd ..
244 254
245 255 Test dry-run rebasing
246 256
247 257 $ hg init repo3
248 258 $ cd repo3
249 259 $ echo a>a
250 260 $ hg ci -Aqma
251 261 $ echo b>b
252 262 $ hg ci -Aqmb
253 263 $ echo c>c
254 264 $ hg ci -Aqmc
255 265 $ echo d>d
256 266 $ hg ci -Aqmd
257 267 $ echo e>e
258 268 $ hg ci -Aqme
259 269
260 270 $ hg up 1 -q
261 271 $ echo f>f
262 272 $ hg ci -Amf
263 273 adding f
264 274 created new head
265 275 $ echo g>g
266 276 $ hg ci -Aqmg
267 277 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
268 278 @ 6:baf10c5166d4 test
269 279 | g
270 280 |
271 281 o 5:6343ca3eff20 test
272 282 | f
273 283 |
274 284 | o 4:e860deea161a test
275 285 | | e
276 286 | |
277 287 | o 3:055a42cdd887 test
278 288 | | d
279 289 | |
280 290 | o 2:177f92b77385 test
281 291 |/ c
282 292 |
283 293 o 1:d2ae7f538514 test
284 294 | b
285 295 |
286 296 o 0:cb9a9f314b8b test
287 297 a
288 298
289 299 Make sure it throws error while passing --continue or --abort with --dry-run
290 300 $ hg rebase -s 2 -d 6 -n --continue
291 301 abort: cannot specify both --dry-run and --continue
292 302 [255]
293 303 $ hg rebase -s 2 -d 6 -n --abort
294 304 abort: cannot specify both --dry-run and --abort
295 305 [255]
296 306
297 307 Check dryrun gives correct results when there is no conflict in rebasing
298 308 $ hg rebase -s 2 -d 6 -n
299 309 starting dry-run rebase; repository will not be changed
300 310 rebasing 2:177f92b77385 "c"
301 311 rebasing 3:055a42cdd887 "d"
302 312 rebasing 4:e860deea161a "e"
303 313 dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase
304 314
305 315 $ hg diff
306 316 $ hg status
307 317
308 318 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
309 319 @ 6:baf10c5166d4 test
310 320 | g
311 321 |
312 322 o 5:6343ca3eff20 test
313 323 | f
314 324 |
315 325 | o 4:e860deea161a test
316 326 | | e
317 327 | |
318 328 | o 3:055a42cdd887 test
319 329 | | d
320 330 | |
321 331 | o 2:177f92b77385 test
322 332 |/ c
323 333 |
324 334 o 1:d2ae7f538514 test
325 335 | b
326 336 |
327 337 o 0:cb9a9f314b8b test
328 338 a
329 339
330 340 Check dryrun working with --collapse when there is no conflict
331 341 $ hg rebase -s 2 -d 6 -n --collapse
332 342 starting dry-run rebase; repository will not be changed
333 343 rebasing 2:177f92b77385 "c"
334 344 rebasing 3:055a42cdd887 "d"
335 345 rebasing 4:e860deea161a "e"
336 346 dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase
337 347
338 348 Check dryrun gives correct results when there is conflict in rebasing
339 349 Make a conflict:
340 350 $ hg up 6 -q
341 351 $ echo conflict>e
342 352 $ hg ci -Aqm "conflict with e"
343 353 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
344 354 @ 7:d2c195b28050 test
345 355 | conflict with e
346 356 |
347 357 o 6:baf10c5166d4 test
348 358 | g
349 359 |
350 360 o 5:6343ca3eff20 test
351 361 | f
352 362 |
353 363 | o 4:e860deea161a test
354 364 | | e
355 365 | |
356 366 | o 3:055a42cdd887 test
357 367 | | d
358 368 | |
359 369 | o 2:177f92b77385 test
360 370 |/ c
361 371 |
362 372 o 1:d2ae7f538514 test
363 373 | b
364 374 |
365 375 o 0:cb9a9f314b8b test
366 376 a
367 377
368 378 $ hg rebase -s 2 -d 7 -n
369 379 starting dry-run rebase; repository will not be changed
370 380 rebasing 2:177f92b77385 "c"
371 381 rebasing 3:055a42cdd887 "d"
372 382 rebasing 4:e860deea161a "e"
373 383 merging e
374 384 transaction abort!
375 385 rollback completed
376 386 hit a merge conflict
377 387 [1]
378 388 $ hg diff
379 389 $ hg status
380 390 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
381 391 @ 7:d2c195b28050 test
382 392 | conflict with e
383 393 |
384 394 o 6:baf10c5166d4 test
385 395 | g
386 396 |
387 397 o 5:6343ca3eff20 test
388 398 | f
389 399 |
390 400 | o 4:e860deea161a test
391 401 | | e
392 402 | |
393 403 | o 3:055a42cdd887 test
394 404 | | d
395 405 | |
396 406 | o 2:177f92b77385 test
397 407 |/ c
398 408 |
399 409 o 1:d2ae7f538514 test
400 410 | b
401 411 |
402 412 o 0:cb9a9f314b8b test
403 413 a
404 414
405 415 Check dryrun working with --collapse when there is conflicts
406 416 $ hg rebase -s 2 -d 7 -n --collapse
407 417 starting dry-run rebase; repository will not be changed
408 418 rebasing 2:177f92b77385 "c"
409 419 rebasing 3:055a42cdd887 "d"
410 420 rebasing 4:e860deea161a "e"
411 421 merging e
412 422 hit a merge conflict
413 423 [1]
414 424
415 425 In-memory rebase that fails due to merge conflicts
416 426
417 427 $ hg rebase -s 2 -d 7
418 428 rebasing 2:177f92b77385 "c"
419 429 rebasing 3:055a42cdd887 "d"
420 430 rebasing 4:e860deea161a "e"
421 431 merging e
422 432 transaction abort!
423 433 rollback completed
424 434 hit merge conflicts; re-running rebase without in-memory merge
425 435 rebasing 2:177f92b77385 "c"
426 436 rebasing 3:055a42cdd887 "d"
427 437 rebasing 4:e860deea161a "e"
428 438 merging e
429 439 warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
430 440 unresolved conflicts (see hg resolve, then hg rebase --continue)
431 441 [1]
432 442 $ hg rebase --abort
433 443 saved backup bundle to $TESTTMP/repo1/repo3/.hg/strip-backup/c1e524d4287c-f91f82e1-backup.hg
434 444 rebase aborted
435 445
436 446 Retrying without in-memory merge won't lose working copy changes
437 447 $ cd ..
438 448 $ hg clone repo3 repo3-dirty -q
439 449 $ cd repo3-dirty
440 450 $ echo dirty > a
441 451 $ hg rebase -s 2 -d 7
442 452 rebasing 2:177f92b77385 "c"
443 453 rebasing 3:055a42cdd887 "d"
444 454 rebasing 4:e860deea161a "e"
445 455 merging e
446 456 transaction abort!
447 457 rollback completed
448 458 hit merge conflicts; re-running rebase without in-memory merge
449 459 abort: uncommitted changes
450 460 [255]
451 461 $ cat a
452 462 dirty
453 463
454 464 Retrying without in-memory merge won't lose merge state
455 465 $ cd ..
456 466 $ hg clone repo3 repo3-merge-state -q
457 467 $ cd repo3-merge-state
458 468 $ hg merge 4
459 469 merging e
460 470 warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
461 471 2 files updated, 0 files merged, 0 files removed, 1 files unresolved
462 472 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
463 473 [1]
464 474 $ hg resolve -l
465 475 U e
466 476 $ hg rebase -s 2 -d 7
467 477 rebasing 2:177f92b77385 "c"
468 478 abort: outstanding merge conflicts
469 479 [255]
470 480 $ hg resolve -l
471 481 U e
472 482
473 483 ==========================
474 484 Test for --confirm option|
475 485 ==========================
476 486 $ cd ..
477 487 $ hg clone repo3 repo4 -q
478 488 $ cd repo4
479 489 $ hg strip 7 -q
480 490 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
481 491 @ 6:baf10c5166d4 test
482 492 | g
483 493 |
484 494 o 5:6343ca3eff20 test
485 495 | f
486 496 |
487 497 | o 4:e860deea161a test
488 498 | | e
489 499 | |
490 500 | o 3:055a42cdd887 test
491 501 | | d
492 502 | |
493 503 | o 2:177f92b77385 test
494 504 |/ c
495 505 |
496 506 o 1:d2ae7f538514 test
497 507 | b
498 508 |
499 509 o 0:cb9a9f314b8b test
500 510 a
501 511
502 512 Check it gives error when both --dryrun and --confirm is used:
503 513 $ hg rebase -s 2 -d . --confirm --dry-run
504 514 abort: cannot specify both --confirm and --dry-run
505 515 [255]
506 516 $ hg rebase -s 2 -d . --confirm --abort
507 517 abort: cannot specify both --confirm and --abort
508 518 [255]
509 519 $ hg rebase -s 2 -d . --confirm --continue
510 520 abort: cannot specify both --confirm and --continue
511 521 [255]
512 522
513 523 Test --confirm option when there are no conflicts:
514 524 $ hg rebase -s 2 -d . --keep --config ui.interactive=True --confirm << EOF
515 525 > n
516 526 > EOF
517 527 starting in-memory rebase
518 528 rebasing 2:177f92b77385 "c"
519 529 rebasing 3:055a42cdd887 "d"
520 530 rebasing 4:e860deea161a "e"
521 531 rebase completed successfully
522 532 apply changes (yn)? n
523 533 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
524 534 @ 6:baf10c5166d4 test
525 535 | g
526 536 |
527 537 o 5:6343ca3eff20 test
528 538 | f
529 539 |
530 540 | o 4:e860deea161a test
531 541 | | e
532 542 | |
533 543 | o 3:055a42cdd887 test
534 544 | | d
535 545 | |
536 546 | o 2:177f92b77385 test
537 547 |/ c
538 548 |
539 549 o 1:d2ae7f538514 test
540 550 | b
541 551 |
542 552 o 0:cb9a9f314b8b test
543 553 a
544 554
545 555 $ hg rebase -s 2 -d . --keep --config ui.interactive=True --confirm << EOF
546 556 > y
547 557 > EOF
548 558 starting in-memory rebase
549 559 rebasing 2:177f92b77385 "c"
550 560 rebasing 3:055a42cdd887 "d"
551 561 rebasing 4:e860deea161a "e"
552 562 rebase completed successfully
553 563 apply changes (yn)? y
554 564 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
555 565 o 9:9fd28f55f6dc test
556 566 | e
557 567 |
558 568 o 8:12cbf031f469 test
559 569 | d
560 570 |
561 571 o 7:c83b1da5b1ae test
562 572 | c
563 573 |
564 574 @ 6:baf10c5166d4 test
565 575 | g
566 576 |
567 577 o 5:6343ca3eff20 test
568 578 | f
569 579 |
570 580 | o 4:e860deea161a test
571 581 | | e
572 582 | |
573 583 | o 3:055a42cdd887 test
574 584 | | d
575 585 | |
576 586 | o 2:177f92b77385 test
577 587 |/ c
578 588 |
579 589 o 1:d2ae7f538514 test
580 590 | b
581 591 |
582 592 o 0:cb9a9f314b8b test
583 593 a
584 594
585 595 Test --confirm option when there is a conflict
586 596 $ hg up tip -q
587 597 $ echo ee>e
588 598 $ hg ci --amend -m "conflict with e" -q
589 599 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
590 600 @ 9:906d72f66a59 test
591 601 | conflict with e
592 602 |
593 603 o 8:12cbf031f469 test
594 604 | d
595 605 |
596 606 o 7:c83b1da5b1ae test
597 607 | c
598 608 |
599 609 o 6:baf10c5166d4 test
600 610 | g
601 611 |
602 612 o 5:6343ca3eff20 test
603 613 | f
604 614 |
605 615 | o 4:e860deea161a test
606 616 | | e
607 617 | |
608 618 | o 3:055a42cdd887 test
609 619 | | d
610 620 | |
611 621 | o 2:177f92b77385 test
612 622 |/ c
613 623 |
614 624 o 1:d2ae7f538514 test
615 625 | b
616 626 |
617 627 o 0:cb9a9f314b8b test
618 628 a
619 629
620 630 $ hg rebase -s 4 -d . --keep --confirm
621 631 starting in-memory rebase
622 632 rebasing 4:e860deea161a "e"
623 633 merging e
624 634 hit a merge conflict
625 635 [1]
626 636 $ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n"
627 637 @ 9:906d72f66a59 test
628 638 | conflict with e
629 639 |
630 640 o 8:12cbf031f469 test
631 641 | d
632 642 |
633 643 o 7:c83b1da5b1ae test
634 644 | c
635 645 |
636 646 o 6:baf10c5166d4 test
637 647 | g
638 648 |
639 649 o 5:6343ca3eff20 test
640 650 | f
641 651 |
642 652 | o 4:e860deea161a test
643 653 | | e
644 654 | |
645 655 | o 3:055a42cdd887 test
646 656 | | d
647 657 | |
648 658 | o 2:177f92b77385 test
649 659 |/ c
650 660 |
651 661 o 1:d2ae7f538514 test
652 662 | b
653 663 |
654 664 o 0:cb9a9f314b8b test
655 665 a
656 666
657 667 #if execbit
658 668
659 669 Test a metadata-only in-memory merge
660 670 $ cd $TESTTMP
661 671 $ hg init no_exception
662 672 $ cd no_exception
663 673 # Produce the following graph:
664 674 # o 'add +x to foo.txt'
665 675 # | o r1 (adds bar.txt, just for something to rebase to)
666 676 # |/
667 677 # o r0 (adds foo.txt, no +x)
668 678 $ echo hi > foo.txt
669 679 $ hg ci -qAm r0
670 680 $ echo hi > bar.txt
671 681 $ hg ci -qAm r1
672 682 $ hg co -qr ".^"
673 683 $ chmod +x foo.txt
674 684 $ hg ci -qAm 'add +x to foo.txt'
675 685 issue5960: this was raising an AttributeError exception
676 686 $ hg rebase -r . -d 1
677 687 rebasing 2:539b93e77479 "add +x to foo.txt" (tip)
678 688 saved backup bundle to $TESTTMP/no_exception/.hg/strip-backup/*.hg (glob)
679 689 $ hg diff -c tip
680 690 diff --git a/foo.txt b/foo.txt
681 691 old mode 100644
682 692 new mode 100755
683 693
684 694 #endif
General Comments 0
You need to be logged in to leave comments. Login now