601 return (repo.wvfs.isfileorlink(f) |
601 return (repo.wvfs.isfileorlink(f) |
602 and repo.wvfs.audit.check(f) |
602 and repo.wvfs.audit.check(f) |
603 and repo.dirstate.normalize(f) not in repo.dirstate |
603 and repo.dirstate.normalize(f) not in repo.dirstate |
604 and mctx[f2].cmp(wctx[f])) |
604 and mctx[f2].cmp(wctx[f])) |
605 |
605 |
606 def _checkunknownfiles(repo, wctx, mctx, force, actions): |
606 def _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce): |
607 """ |
607 """ |
608 Considers any actions that care about the presence of conflicting unknown |
608 Considers any actions that care about the presence of conflicting unknown |
609 files. For some actions, the result is to abort; for others, it is to |
609 files. For some actions, the result is to abort; for others, it is to |
610 choose a different action. |
610 choose a different action. |
611 """ |
611 """ |
903 elif m == 'dc' and f in ancestor and not mctx[f].cmp(ancestor[f]): |
903 elif m == 'dc' and f in ancestor and not mctx[f].cmp(ancestor[f]): |
904 # remote did change but ended up with same content |
904 # remote did change but ended up with same content |
905 del actions[f] # don't get = keep local deleted |
905 del actions[f] # don't get = keep local deleted |
906 |
906 |
907 def calculateupdates(repo, wctx, mctx, ancestors, branchmerge, force, |
907 def calculateupdates(repo, wctx, mctx, ancestors, branchmerge, force, |
908 acceptremote, followcopies, matcher=None): |
908 acceptremote, followcopies, matcher=None, |
|
909 mergeforce=False): |
909 "Calculate the actions needed to merge mctx into wctx using ancestors" |
910 "Calculate the actions needed to merge mctx into wctx using ancestors" |
910 if len(ancestors) == 1: # default |
911 if len(ancestors) == 1: # default |
911 actions, diverge, renamedelete = manifestmerge( |
912 actions, diverge, renamedelete = manifestmerge( |
912 repo, wctx, mctx, ancestors[0], branchmerge, force, matcher, |
913 repo, wctx, mctx, ancestors[0], branchmerge, force, matcher, |
913 acceptremote, followcopies) |
914 acceptremote, followcopies) |
914 _checkunknownfiles(repo, wctx, mctx, force, actions) |
915 _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce) |
915 |
916 |
916 else: # only when merge.preferancestor=* - the default |
917 else: # only when merge.preferancestor=* - the default |
917 repo.ui.note( |
918 repo.ui.note( |
918 _("note: merging %s and %s using bids from ancestors %s\n") % |
919 _("note: merging %s and %s using bids from ancestors %s\n") % |
919 (wctx, mctx, _(' and ').join(str(anc) for anc in ancestors))) |
920 (wctx, mctx, _(' and ').join(str(anc) for anc in ancestors))) |
924 for ancestor in ancestors: |
925 for ancestor in ancestors: |
925 repo.ui.note(_('\ncalculating bids for ancestor %s\n') % ancestor) |
926 repo.ui.note(_('\ncalculating bids for ancestor %s\n') % ancestor) |
926 actions, diverge1, renamedelete1 = manifestmerge( |
927 actions, diverge1, renamedelete1 = manifestmerge( |
927 repo, wctx, mctx, ancestor, branchmerge, force, matcher, |
928 repo, wctx, mctx, ancestor, branchmerge, force, matcher, |
928 acceptremote, followcopies) |
929 acceptremote, followcopies) |
929 _checkunknownfiles(repo, wctx, mctx, force, actions) |
930 _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce) |
930 |
931 |
931 # Track the shortest set of warning on the theory that bid |
932 # Track the shortest set of warning on the theory that bid |
932 # merge will correctly incorporate more information |
933 # merge will correctly incorporate more information |
933 if diverge is None or len(diverge1) < len(diverge): |
934 if diverge is None or len(diverge1) < len(diverge): |
934 diverge = diverge1 |
935 diverge = diverge1 |
1342 repo.dirstate.copy(f0, f) |
1343 repo.dirstate.copy(f0, f) |
1343 else: |
1344 else: |
1344 repo.dirstate.normal(f) |
1345 repo.dirstate.normal(f) |
1345 |
1346 |
1346 def update(repo, node, branchmerge, force, ancestor=None, |
1347 def update(repo, node, branchmerge, force, ancestor=None, |
1347 mergeancestor=False, labels=None, matcher=None): |
1348 mergeancestor=False, labels=None, matcher=None, mergeforce=False): |
1348 """ |
1349 """ |
1349 Perform a merge between the working directory and the given node |
1350 Perform a merge between the working directory and the given node |
1350 |
1351 |
1351 node = the node to update to, or None if unspecified |
1352 node = the node to update to, or None if unspecified |
1352 branchmerge = whether to merge between branches |
1353 branchmerge = whether to merge between branches |
1356 we should accept the incoming changes for any prompts that occur. |
1357 we should accept the incoming changes for any prompts that occur. |
1357 If false, merging with an ancestor (fast-forward) is only allowed |
1358 If false, merging with an ancestor (fast-forward) is only allowed |
1358 between different named branches. This flag is used by rebase extension |
1359 between different named branches. This flag is used by rebase extension |
1359 as a temporary fix and should be avoided in general. |
1360 as a temporary fix and should be avoided in general. |
1360 labels = labels to use for base, local and other |
1361 labels = labels to use for base, local and other |
|
1362 mergeforce = whether the merge was run with 'merge --force' (deprecated): if |
|
1363 this is True, then 'force' should be True as well. |
1361 |
1364 |
1362 The table below shows all the behaviors of the update command |
1365 The table below shows all the behaviors of the update command |
1363 given the -c and -C or no options, whether the working directory |
1366 given the -c and -C or no options, whether the working directory |
1364 is dirty, whether a revision is specified, and the relationship of |
1367 is dirty, whether a revision is specified, and the relationship of |
1365 the parent rev to the target rev (linear, on the same named |
1368 the parent rev to the target rev (linear, on the same named |
1491 followcopies = True |
1494 followcopies = True |
1492 |
1495 |
1493 ### calculate phase |
1496 ### calculate phase |
1494 actionbyfile, diverge, renamedelete = calculateupdates( |
1497 actionbyfile, diverge, renamedelete = calculateupdates( |
1495 repo, wc, p2, pas, branchmerge, force, mergeancestor, |
1498 repo, wc, p2, pas, branchmerge, force, mergeancestor, |
1496 followcopies, matcher=matcher) |
1499 followcopies, matcher=matcher, mergeforce=mergeforce) |
1497 |
1500 |
1498 # Prompt and create actions. Most of this is in the resolve phase |
1501 # Prompt and create actions. Most of this is in the resolve phase |
1499 # already, but we can't handle .hgsubstate in filemerge or |
1502 # already, but we can't handle .hgsubstate in filemerge or |
1500 # subrepo.submerge yet so we have to keep prompting for it. |
1503 # subrepo.submerge yet so we have to keep prompting for it. |
1501 if '.hgsubstate' in actionbyfile: |
1504 if '.hgsubstate' in actionbyfile: |