Mercurial > hg
comparison mercurial/filemerge.py @ 48504:ba34141f8dbb
filemerge: stop passing around 3 unused `None` values in `files` argument
Since 67cfffbfb6a0 (filemerge: eliminate most uses of tempfiles,
2017-08-31), we have used only the last entry in the `files` tuple
that gets passed around to various functions. That commit said
"Emphasize that they're unused so we can more easily remove them
later.". It's now "later".
Differential Revision: https://phab.mercurial-scm.org/D11877
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 06 Dec 2021 12:48:01 -0800 |
parents | da38519cbd10 |
children | 40522aea2f27 |
comparison
equal
deleted
inserted
replaced
48503:da38519cbd10 | 48504:ba34141f8dbb |
---|---|
397 return filectx.changectx()[filectx.path()] | 397 return filectx.changectx()[filectx.path()] |
398 else: | 398 else: |
399 return filectx | 399 return filectx |
400 | 400 |
401 | 401 |
402 def _premerge(repo, fcd, fco, fca, toolconf, files, labels=None): | 402 def _premerge(repo, fcd, fco, fca, toolconf, backup, labels=None): |
403 tool, toolpath, binary, symlink, scriptfn = toolconf | 403 tool, toolpath, binary, symlink, scriptfn = toolconf |
404 if symlink or fcd.isabsent() or fco.isabsent(): | 404 if symlink or fcd.isabsent() or fco.isabsent(): |
405 return 1 | 405 return 1 |
406 unused, unused, unused, backup = files | |
407 | 406 |
408 ui = repo.ui | 407 ui = repo.ui |
409 | 408 |
410 validkeep = [b'keep', b'keep-merge3', b'keep-mergediff'] | 409 validkeep = [b'keep', b'keep-merge3', b'keep-mergediff'] |
411 | 410 |
461 ) | 460 ) |
462 return False | 461 return False |
463 return True | 462 return True |
464 | 463 |
465 | 464 |
466 def _merge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, mode): | 465 def _merge(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels, mode): |
467 """ | 466 """ |
468 Uses the internal non-interactive simple merge algorithm for merging | 467 Uses the internal non-interactive simple merge algorithm for merging |
469 files. It will fail if there are any conflicts and leave markers in | 468 files. It will fail if there are any conflicts and leave markers in |
470 the partially merged file. Markers will have two sections, one for each side | 469 the partially merged file. Markers will have two sections, one for each side |
471 of merge, unless mode equals 'union' which suppresses the markers.""" | 470 of merge, unless mode equals 'union' which suppresses the markers.""" |
482 b"warning: conflicts while merging %s! " | 481 b"warning: conflicts while merging %s! " |
483 b"(edit, then use 'hg resolve --mark')\n" | 482 b"(edit, then use 'hg resolve --mark')\n" |
484 ), | 483 ), |
485 precheck=_mergecheck, | 484 precheck=_mergecheck, |
486 ) | 485 ) |
487 def _iunion(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 486 def _iunion(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None): |
488 """ | 487 """ |
489 Uses the internal non-interactive simple merge algorithm for merging | 488 Uses the internal non-interactive simple merge algorithm for merging |
490 files. It will use both left and right sides for conflict regions. | 489 files. It will use both left and right sides for conflict regions. |
491 No markers are inserted.""" | 490 No markers are inserted.""" |
492 return _merge( | 491 return _merge( |
493 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'union' | 492 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels, b'union' |
494 ) | 493 ) |
495 | 494 |
496 | 495 |
497 @internaltool( | 496 @internaltool( |
498 b'merge', | 497 b'merge', |
501 b"warning: conflicts while merging %s! " | 500 b"warning: conflicts while merging %s! " |
502 b"(edit, then use 'hg resolve --mark')\n" | 501 b"(edit, then use 'hg resolve --mark')\n" |
503 ), | 502 ), |
504 precheck=_mergecheck, | 503 precheck=_mergecheck, |
505 ) | 504 ) |
506 def _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 505 def _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None): |
507 """ | 506 """ |
508 Uses the internal non-interactive simple merge algorithm for merging | 507 Uses the internal non-interactive simple merge algorithm for merging |
509 files. It will fail if there are any conflicts and leave markers in | 508 files. It will fail if there are any conflicts and leave markers in |
510 the partially merged file. Markers will have two sections, one for each side | 509 the partially merged file. Markers will have two sections, one for each side |
511 of merge.""" | 510 of merge.""" |
512 return _merge( | 511 return _merge( |
513 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'merge' | 512 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels, b'merge' |
514 ) | 513 ) |
515 | 514 |
516 | 515 |
517 @internaltool( | 516 @internaltool( |
518 b'merge3', | 517 b'merge3', |
521 b"warning: conflicts while merging %s! " | 520 b"warning: conflicts while merging %s! " |
522 b"(edit, then use 'hg resolve --mark')\n" | 521 b"(edit, then use 'hg resolve --mark')\n" |
523 ), | 522 ), |
524 precheck=_mergecheck, | 523 precheck=_mergecheck, |
525 ) | 524 ) |
526 def _imerge3(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 525 def _imerge3(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None): |
527 """ | 526 """ |
528 Uses the internal non-interactive simple merge algorithm for merging | 527 Uses the internal non-interactive simple merge algorithm for merging |
529 files. It will fail if there are any conflicts and leave markers in | 528 files. It will fail if there are any conflicts and leave markers in |
530 the partially merged file. Marker will have three sections, one from each | 529 the partially merged file. Marker will have three sections, one from each |
531 side of the merge and one for the base content.""" | 530 side of the merge and one for the base content.""" |
532 if not labels: | 531 if not labels: |
533 labels = _defaultconflictlabels | 532 labels = _defaultconflictlabels |
534 if len(labels) < 3: | 533 if len(labels) < 3: |
535 labels.append(b'base') | 534 labels.append(b'base') |
536 return _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels) | 535 return _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels) |
537 | 536 |
538 | 537 |
539 @internaltool( | 538 @internaltool( |
540 b'merge3-lie-about-conflicts', | 539 b'merge3-lie-about-conflicts', |
541 fullmerge, | 540 fullmerge, |
563 b"(edit, then use 'hg resolve --mark')\n" | 562 b"(edit, then use 'hg resolve --mark')\n" |
564 ), | 563 ), |
565 precheck=_mergecheck, | 564 precheck=_mergecheck, |
566 ) | 565 ) |
567 def _imerge_diff( | 566 def _imerge_diff( |
568 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None | 567 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None |
569 ): | 568 ): |
570 """ | 569 """ |
571 Uses the internal non-interactive simple merge algorithm for merging | 570 Uses the internal non-interactive simple merge algorithm for merging |
572 files. It will fail if there are any conflicts and leave markers in | 571 files. It will fail if there are any conflicts and leave markers in |
573 the partially merged file. The marker will have two sections, one with the | 572 the partially merged file. The marker will have two sections, one with the |
576 if not labels: | 575 if not labels: |
577 labels = _defaultconflictlabels | 576 labels = _defaultconflictlabels |
578 if len(labels) < 3: | 577 if len(labels) < 3: |
579 labels.append(b'base') | 578 labels.append(b'base') |
580 return _merge( | 579 return _merge( |
581 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'mergediff' | 580 repo, |
581 mynode, | |
582 orig, | |
583 fcd, | |
584 fco, | |
585 fca, | |
586 toolconf, | |
587 backup, | |
588 labels, | |
589 b'mergediff', | |
582 ) | 590 ) |
583 | 591 |
584 | 592 |
585 def _imergeauto( | 593 def _imergeauto( |
586 repo, | 594 repo, |
588 orig, | 596 orig, |
589 fcd, | 597 fcd, |
590 fco, | 598 fco, |
591 fca, | 599 fca, |
592 toolconf, | 600 toolconf, |
593 files, | 601 backup, |
594 labels=None, | 602 labels=None, |
595 localorother=None, | 603 localorother=None, |
596 ): | 604 ): |
597 """ | 605 """ |
598 Generic driver for _imergelocal and _imergeother | 606 Generic driver for _imergelocal and _imergeother |
629 b"automatic tag merging of %s failed! " | 637 b"automatic tag merging of %s failed! " |
630 b"(use 'hg resolve --tool :merge' or another merge " | 638 b"(use 'hg resolve --tool :merge' or another merge " |
631 b"tool of your choice)\n" | 639 b"tool of your choice)\n" |
632 ), | 640 ), |
633 ) | 641 ) |
634 def _itagmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 642 def _itagmerge( |
643 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None | |
644 ): | |
635 """ | 645 """ |
636 Uses the internal tag merge algorithm (experimental). | 646 Uses the internal tag merge algorithm (experimental). |
637 """ | 647 """ |
638 success, status = tagmerge.merge(repo, fcd, fco, fca) | 648 success, status = tagmerge.merge(repo, fcd, fco, fca) |
639 return success, status, False | 649 return success, status, False |
640 | 650 |
641 | 651 |
642 @internaltool(b'dump', fullmerge, binary=True, symlink=True) | 652 @internaltool(b'dump', fullmerge, binary=True, symlink=True) |
643 def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 653 def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None): |
644 """ | 654 """ |
645 Creates three versions of the files to merge, containing the | 655 Creates three versions of the files to merge, containing the |
646 contents of local, other and base. These files can then be used to | 656 contents of local, other and base. These files can then be used to |
647 perform a merge manually. If the file to be merged is named | 657 perform a merge manually. If the file to be merged is named |
648 ``a.txt``, these files will accordingly be named ``a.txt.local``, | 658 ``a.txt``, these files will accordingly be named ``a.txt.local``, |
667 repo.wwrite(fd + b".base", fca.data(), fca.flags()) | 677 repo.wwrite(fd + b".base", fca.data(), fca.flags()) |
668 return False, 1, False | 678 return False, 1, False |
669 | 679 |
670 | 680 |
671 @internaltool(b'forcedump', mergeonly, binary=True, symlink=True) | 681 @internaltool(b'forcedump', mergeonly, binary=True, symlink=True) |
672 def _forcedump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 682 def _forcedump( |
683 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None | |
684 ): | |
673 """ | 685 """ |
674 Creates three versions of the files as same as :dump, but omits premerge. | 686 Creates three versions of the files as same as :dump, but omits premerge. |
675 """ | 687 """ |
676 return _idump( | 688 return _idump( |
677 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=labels | 689 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=labels |
678 ) | 690 ) |
679 | 691 |
680 | 692 |
681 def _xmergeimm(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | 693 def _xmergeimm( |
694 repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels=None | |
695 ): | |
682 # In-memory merge simply raises an exception on all external merge tools, | 696 # In-memory merge simply raises an exception on all external merge tools, |
683 # for now. | 697 # for now. |
684 # | 698 # |
685 # It would be possible to run most tools with temporary files, but this | 699 # It would be possible to run most tools with temporary files, but this |
686 # raises the question of what to do if the user only partially resolves the | 700 # raises the question of what to do if the user only partially resolves the |
744 ui, tmpl, defaults=templatekw.keywords, resources=tres | 758 ui, tmpl, defaults=templatekw.keywords, resources=tres |
745 ) | 759 ) |
746 ui.status(t.renderdefault(props)) | 760 ui.status(t.renderdefault(props)) |
747 | 761 |
748 | 762 |
749 def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels): | 763 def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, backup, labels): |
750 tool, toolpath, binary, symlink, scriptfn = toolconf | 764 tool, toolpath, binary, symlink, scriptfn = toolconf |
751 uipathfn = scmutil.getuipathfn(repo) | 765 uipathfn = scmutil.getuipathfn(repo) |
752 if fcd.isabsent() or fco.isabsent(): | 766 if fcd.isabsent() or fco.isabsent(): |
753 repo.ui.warn( | 767 repo.ui.warn( |
754 _(b'warning: %s cannot merge change/delete conflict for %s\n') | 768 _(b'warning: %s cannot merge change/delete conflict for %s\n') |
755 % (tool, uipathfn(fcd.path())) | 769 % (tool, uipathfn(fcd.path())) |
756 ) | 770 ) |
757 return False, 1, None | 771 return False, 1, None |
758 unused, unused, unused, backup = files | |
759 localpath = _workingpath(repo, fcd) | 772 localpath = _workingpath(repo, fcd) |
760 args = _toolstr(repo.ui, tool, b"args") | 773 args = _toolstr(repo.ui, tool, b"args") |
761 | 774 |
762 with _maketempfiles( | 775 with _maketempfiles( |
763 repo, fco, fca, repo.wvfs.join(backup.path()), b"$output" in args | 776 repo, fco, fca, repo.wvfs.join(backup.path()), b"$output" in args |
1117 ) | 1130 ) |
1118 ui.warn(onfailure % fduipath) | 1131 ui.warn(onfailure % fduipath) |
1119 return True, 1, False | 1132 return True, 1, False |
1120 | 1133 |
1121 backup = _makebackup(repo, ui, wctx, fcd) | 1134 backup = _makebackup(repo, ui, wctx, fcd) |
1122 files = (None, None, None, backup) | |
1123 r = 1 | 1135 r = 1 |
1124 try: | 1136 try: |
1125 internalmarkerstyle = ui.config(b'ui', b'mergemarkers') | 1137 internalmarkerstyle = ui.config(b'ui', b'mergemarkers') |
1126 if isexternal: | 1138 if isexternal: |
1127 markerstyle = _toolstr(ui, tool, b'mergemarkers') | 1139 markerstyle = _toolstr(ui, tool, b'mergemarkers') |
1152 premergelabels = _formatlabels( | 1164 premergelabels = _formatlabels( |
1153 repo, fcd, fco, fca, premergelabels, tool=labeltool | 1165 repo, fcd, fco, fca, premergelabels, tool=labeltool |
1154 ) | 1166 ) |
1155 | 1167 |
1156 r = _premerge( | 1168 r = _premerge( |
1157 repo, fcd, fco, fca, toolconf, files, labels=premergelabels | 1169 repo, fcd, fco, fca, toolconf, backup, labels=premergelabels |
1158 ) | 1170 ) |
1159 # we're done if premerge was successful (r is 0) | 1171 # we're done if premerge was successful (r is 0) |
1160 if not r: | 1172 if not r: |
1161 return not r, r, False | 1173 return not r, r, False |
1162 | 1174 |
1166 orig, | 1178 orig, |
1167 fcd, | 1179 fcd, |
1168 fco, | 1180 fco, |
1169 fca, | 1181 fca, |
1170 toolconf, | 1182 toolconf, |
1171 files, | 1183 backup, |
1172 labels=formattedlabels, | 1184 labels=formattedlabels, |
1173 ) | 1185 ) |
1174 | 1186 |
1175 if needcheck: | 1187 if needcheck: |
1176 r = _check(repo, r, ui, tool, fcd, files) | 1188 r = _check(repo, r, ui, tool, fcd, backup) |
1177 | 1189 |
1178 if r: | 1190 if r: |
1179 if onfailure: | 1191 if onfailure: |
1180 if wctx.isinmemory(): | 1192 if wctx.isinmemory(): |
1181 raise error.InMemoryMergeConflictsError( | 1193 raise error.InMemoryMergeConflictsError( |
1220 re.MULTILINE, | 1232 re.MULTILINE, |
1221 ) | 1233 ) |
1222 ) | 1234 ) |
1223 | 1235 |
1224 | 1236 |
1225 def _check(repo, r, ui, tool, fcd, files): | 1237 def _check(repo, r, ui, tool, fcd, backup): |
1226 fd = fcd.path() | 1238 fd = fcd.path() |
1227 uipathfn = scmutil.getuipathfn(repo) | 1239 uipathfn = scmutil.getuipathfn(repo) |
1228 unused, unused, unused, backup = files | |
1229 | 1240 |
1230 if not r and ( | 1241 if not r and ( |
1231 _toolbool(ui, tool, b"checkconflicts") | 1242 _toolbool(ui, tool, b"checkconflicts") |
1232 or b'conflicts' in _toollist(ui, tool, b"check") | 1243 or b'conflicts' in _toollist(ui, tool, b"check") |
1233 ): | 1244 ): |