Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 45285:e7196f1da2b1
merge: pass mergeresult obj instead of actions in _filternarrowactions()
We want to use rich mergeresult object and it's APIs instead of handling a
dictionary.
Differential Revision: https://phab.mercurial-scm.org/D8823
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 24 Jul 2020 17:49:13 +0530 |
parents | 31c454a5f1a8 |
children | 00e9c5edcd58 |
comparison
equal
deleted
inserted
replaced
45284:31c454a5f1a8 | 45285:e7196f1da2b1 |
---|---|
511 for p in invalidconflicts: | 511 for p in invalidconflicts: |
512 repo.ui.warn(_(b"%s: is both a file and a directory\n") % p) | 512 repo.ui.warn(_(b"%s: is both a file and a directory\n") % p) |
513 raise error.Abort(_(b"destination manifest contains path conflicts")) | 513 raise error.Abort(_(b"destination manifest contains path conflicts")) |
514 | 514 |
515 | 515 |
516 def _filternarrowactions(narrowmatch, branchmerge, actions): | 516 def _filternarrowactions(narrowmatch, branchmerge, mresult): |
517 """ | 517 """ |
518 Filters out actions that can ignored because the repo is narrowed. | 518 Filters out actions that can ignored because the repo is narrowed. |
519 | 519 |
520 Raise an exception if the merge cannot be completed because the repo is | 520 Raise an exception if the merge cannot be completed because the repo is |
521 narrowed. | 521 narrowed. |
522 """ | 522 """ |
523 nooptypes = {b'k'} # TODO: handle with nonconflicttypes | 523 nooptypes = {b'k'} # TODO: handle with nonconflicttypes |
524 nonconflicttypes = set(b'a am c cm f g gs r e'.split()) | 524 nonconflicttypes = set(b'a am c cm f g gs r e'.split()) |
525 # We mutate the items in the dict during iteration, so iterate | 525 # We mutate the items in the dict during iteration, so iterate |
526 # over a copy. | 526 # over a copy. |
527 for f, action in list(actions.items()): | 527 for f, action in list(mresult.actions.items()): |
528 if narrowmatch(f): | 528 if narrowmatch(f): |
529 pass | 529 pass |
530 elif not branchmerge: | 530 elif not branchmerge: |
531 del actions[f] # just updating, ignore changes outside clone | 531 mresult.removefile(f) # just updating, ignore changes outside clone |
532 elif action[0] in nooptypes: | 532 elif action[0] in nooptypes: |
533 del actions[f] # merge does not affect file | 533 mresult.removefile(f) # merge does not affect file |
534 elif action[0] in nonconflicttypes: | 534 elif action[0] in nonconflicttypes: |
535 raise error.Abort( | 535 raise error.Abort( |
536 _( | 536 _( |
537 b'merge affects file \'%s\' outside narrow, ' | 537 b'merge affects file \'%s\' outside narrow, ' |
538 b'which is not yet supported' | 538 b'which is not yet supported' |
948 checkpathconflicts(repo, wctx, p2, mresult) | 948 checkpathconflicts(repo, wctx, p2, mresult) |
949 | 949 |
950 narrowmatch = repo.narrowmatch() | 950 narrowmatch = repo.narrowmatch() |
951 if not narrowmatch.always(): | 951 if not narrowmatch.always(): |
952 # Updates "actions" in place | 952 # Updates "actions" in place |
953 _filternarrowactions(narrowmatch, branchmerge, mresult.actions) | 953 _filternarrowactions(narrowmatch, branchmerge, mresult) |
954 | 954 |
955 renamedelete = branch_copies1.renamedelete | 955 renamedelete = branch_copies1.renamedelete |
956 renamedelete.update(branch_copies2.renamedelete) | 956 renamedelete.update(branch_copies2.renamedelete) |
957 | 957 |
958 mresult.updatevalues(diverge, renamedelete, commitinfo) | 958 mresult.updatevalues(diverge, renamedelete, commitinfo) |