D776: merge: add merge action 'p' to record path conflicts during update
mbthomas (Mark Thomas)
phabricator at mercurial-scm.org
Fri Sep 22 09:28:09 UTC 2017
mbthomas created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Add a new merge action to record path conflicts. A status message is
printed, and the path conflict is added to the merge state.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D776
AFFECTED FILES
mercurial/merge.py
mercurial/sparse.py
CHANGE DETAILS
diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -486,7 +486,8 @@
dropped.append(file)
# Apply changes to disk
- typeactions = dict((m, []) for m in 'a f g am cd dc r dm dg m e k'.split())
+ typeactions = dict((m, [])
+ for m in 'a f g am cd dc r dm dg m e k p'.split())
for f, (m, args, msg) in actions.iteritems():
if m not in typeactions:
typeactions[m] = []
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -1239,12 +1239,29 @@
wctx[f].remove()
numupdates = sum(len(l) for m, l in actions.items() if m != 'k')
+ z = 0
if [a for a in actions['r'] if a[0] == '.hgsubstate']:
subrepo.submerge(repo, wctx, mctx, wctx, overwrite, labels)
- # remove in parallel (must come first)
- z = 0
+ # record path conflicts
+ for f, args, msg in actions['p']:
+ f1, fo = args
+ repo.ui.status(
+ _("%s: path conflict - a file or link has the same name as a "
+ "directory\n")
+ % f)
+ if fo == 'l':
+ repo.ui.status(_("the local file has been renamed to %s\n") % f1)
+ else:
+ repo.ui.status(_("the remote file has been renamed to %s\n") % f1)
+ repo.ui.status(_("resolve manually then use 'hg resolve --mark %s'\n")
+ % f)
+ ms.addpath(f, f1, fo)
+ z += 1
+ progress(_updating, z, item=f, total=numupdates, unit=_files)
+
+ # remove in parallel (must come before getting)
prog = worker.worker(repo.ui, 0.001, batchremove, (repo, wctx),
actions['r'])
for i, item in prog:
@@ -1690,7 +1707,8 @@
del actionbyfile[f]
# Convert to dictionary-of-lists format
- actions = dict((m, []) for m in 'a am f g cd dc r dm dg m e k'.split())
+ actions = dict((m, [])
+ for m in 'a am f g cd dc r dm dg m e k p'.split())
for f, (m, args, msg) in actionbyfile.iteritems():
if m not in actions:
actions[m] = []
To: mbthomas, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list