Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 48725:9bc86adf32f6
merge-actions: make merge action a full featured object
This open the way for having "smarter" value as action, making the usage code
simpler and more flexible.
We have to explicitly use __bytes__ call in a couple of place because Python2?
Differential Revision: https://phab.mercurial-scm.org/D12114
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 28 Jan 2022 17:08:30 +0100 |
parents | 25d5dffbb211 |
children | 5dfaca4464d1 |
comparison
equal
deleted
inserted
replaced
48724:b0aa9b0b9c21 | 48725:9bc86adf32f6 |
---|---|
1199 # we will need to make commitinfo also depend on bid merge logic | 1199 # we will need to make commitinfo also depend on bid merge logic |
1200 mresult._commitinfo.update(mresult1._commitinfo) | 1200 mresult._commitinfo.update(mresult1._commitinfo) |
1201 | 1201 |
1202 for f, a in mresult1.filemap(sort=True): | 1202 for f, a in mresult1.filemap(sort=True): |
1203 m, args, msg = a | 1203 m, args, msg = a |
1204 repo.ui.debug(b' %s: %s -> %s\n' % (f, msg, m)) | 1204 repo.ui.debug(b' %s: %s -> %s\n' % (f, msg, m.__bytes__())) |
1205 if f in fbids: | 1205 if f in fbids: |
1206 d = fbids[f] | 1206 d = fbids[f] |
1207 if m in d: | 1207 if m in d: |
1208 d[m].append(a) | 1208 d[m].append(a) |
1209 else: | 1209 else: |
1220 for f, bids in sorted(fbids.items()): | 1220 for f, bids in sorted(fbids.items()): |
1221 if repo.ui.debugflag: | 1221 if repo.ui.debugflag: |
1222 repo.ui.debug(b" list of bids for %s:\n" % f) | 1222 repo.ui.debug(b" list of bids for %s:\n" % f) |
1223 for m, l in sorted(bids.items()): | 1223 for m, l in sorted(bids.items()): |
1224 for _f, args, msg in l: | 1224 for _f, args, msg in l: |
1225 repo.ui.debug(b' %s -> %s\n' % (msg, m)) | 1225 repo.ui.debug(b' %s -> %s\n' % (msg, m.__bytes__())) |
1226 # bids is a mapping from action method to list af actions | 1226 # bids is a mapping from action method to list af actions |
1227 # Consensus? | 1227 # Consensus? |
1228 if len(bids) == 1: # all bids are the same kind of method | 1228 if len(bids) == 1: # all bids are the same kind of method |
1229 m, l = list(bids.items())[0] | 1229 m, l = list(bids.items())[0] |
1230 if all(a == l[0] for a in l[1:]): # len(bids) is > 1 | 1230 if all(a == l[0] for a in l[1:]): # len(bids) is > 1 |
1231 repo.ui.note(_(b" %s: consensus for %s\n") % (f, m)) | 1231 repo.ui.note( |
1232 _(b" %s: consensus for %s\n") % (f, m.__bytes__()) | |
1233 ) | |
1232 mresult.addfile(f, *l[0]) | 1234 mresult.addfile(f, *l[0]) |
1233 continue | 1235 continue |
1234 # If keep is an option, just do it. | 1236 # If keep is an option, just do it. |
1235 if mergestatemod.ACTION_KEEP in bids: | 1237 if mergestatemod.ACTION_KEEP in bids: |
1236 repo.ui.note(_(b" %s: picking 'keep' action\n") % f) | 1238 repo.ui.note(_(b" %s: picking 'keep' action\n") % f) |
1284 # TODO: Consider other simple actions such as mode changes | 1286 # TODO: Consider other simple actions such as mode changes |
1285 # Handle inefficient democrazy. | 1287 # Handle inefficient democrazy. |
1286 repo.ui.note(_(b' %s: multiple bids for merge action:\n') % f) | 1288 repo.ui.note(_(b' %s: multiple bids for merge action:\n') % f) |
1287 for m, l in sorted(bids.items()): | 1289 for m, l in sorted(bids.items()): |
1288 for _f, args, msg in l: | 1290 for _f, args, msg in l: |
1289 repo.ui.note(b' %s -> %s\n' % (msg, m)) | 1291 repo.ui.note(b' %s -> %s\n' % (msg, m.__bytes__())) |
1290 # Pick random action. TODO: Instead, prompt user when resolving | 1292 # Pick random action. TODO: Instead, prompt user when resolving |
1291 m, l = list(bids.items())[0] | 1293 m, l = list(bids.items())[0] |
1292 repo.ui.warn( | 1294 repo.ui.warn( |
1293 _(b' %s: ambiguous merge - picked %s action\n') % (f, m) | 1295 _(b' %s: ambiguous merge - picked %s action\n') |
1296 % (f, m.__bytes__()) | |
1294 ) | 1297 ) |
1295 mresult.addfile(f, *l[0]) | 1298 mresult.addfile(f, *l[0]) |
1296 continue | 1299 continue |
1297 repo.ui.note(_(b'end of auction\n\n')) | 1300 repo.ui.note(_(b'end of auction\n\n')) |
1298 mresult.updatevalues(diverge, renamedelete) | 1301 mresult.updatevalues(diverge, renamedelete) |
1621 progress.increment(item=f) | 1624 progress.increment(item=f) |
1622 | 1625 |
1623 # keep (noop, just log it) | 1626 # keep (noop, just log it) |
1624 for a in mergestatemod.NO_OP_ACTIONS: | 1627 for a in mergestatemod.NO_OP_ACTIONS: |
1625 for f, args, msg in mresult.getactions((a,), sort=True): | 1628 for f, args, msg in mresult.getactions((a,), sort=True): |
1626 repo.ui.debug(b" %s: %s -> %s\n" % (f, msg, a)) | 1629 repo.ui.debug(b" %s: %s -> %s\n" % (f, msg, a.__bytes__())) |
1627 # no progress | 1630 # no progress |
1628 | 1631 |
1629 # directory rename, move local | 1632 # directory rename, move local |
1630 for f, args, msg in mresult.getactions( | 1633 for f, args, msg in mresult.getactions( |
1631 (mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL,), sort=True | 1634 (mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL,), sort=True |