##// END OF EJS Templates
resolve: add option to warn/abort on -m with unresolved conflict markers...
Kyle Lippincott -
r38829:6c8e3c84 default
parent child Browse files
Show More
@@ -35,6 +35,7 b' from . import ('
35 error,
35 error,
36 exchange,
36 exchange,
37 extensions,
37 extensions,
38 filemerge,
38 formatter,
39 formatter,
39 graphmod,
40 graphmod,
40 hbisect,
41 hbisect,
@@ -4594,6 +4595,9 b' def resolve(ui, repo, *pats, **opts):'
4594 runconclude = False
4595 runconclude = False
4595
4596
4596 tocomplete = []
4597 tocomplete = []
4598 hasconflictmarkers = []
4599 if mark:
4600 markcheck = ui.config('experimental', 'resolve.mark-check')
4597 for f in ms:
4601 for f in ms:
4598 if not m(f):
4602 if not m(f):
4599 continue
4603 continue
@@ -4629,6 +4633,12 b' def resolve(ui, repo, *pats, **opts):'
4629 continue
4633 continue
4630
4634
4631 if mark:
4635 if mark:
4636 if markcheck:
4637 with repo.wvfs(f) as fobj:
4638 fdata = fobj.read()
4639 if filemerge.hasconflictmarkers(fdata) and \
4640 ms[f] != mergemod.MERGE_RECORD_RESOLVED:
4641 hasconflictmarkers.append(f)
4632 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED)
4642 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED)
4633 elif unmark:
4643 elif unmark:
4634 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED)
4644 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED)
@@ -4663,6 +4673,13 b' def resolve(ui, repo, *pats, **opts):'
4663 if inst.errno != errno.ENOENT:
4673 if inst.errno != errno.ENOENT:
4664 raise
4674 raise
4665
4675
4676 if hasconflictmarkers:
4677 ui.warn(_('warning: the following files still have conflict '
4678 'markers:\n ') + '\n '.join(hasconflictmarkers) + '\n')
4679 if markcheck == 'abort' and not all:
4680 raise error.Abort(_('conflict markers detected'),
4681 hint=_('use --all to mark anyway'))
4682
4666 for f in tocomplete:
4683 for f in tocomplete:
4667 try:
4684 try:
4668 # resolve file
4685 # resolve file
@@ -931,6 +931,9 b" coreconfigitem('storage', 'revlog.optimi"
931 default=True,
931 default=True,
932 alias=[('format', 'aggressivemergedeltas')],
932 alias=[('format', 'aggressivemergedeltas')],
933 )
933 )
934 coreconfigitem('experimental', 'resolve.mark-check',
935 default=None,
936 )
934 coreconfigitem('server', 'bookmarks-pushkey-compat',
937 coreconfigitem('server', 'bookmarks-pushkey-compat',
935 default=True,
938 default=True,
936 )
939 )
@@ -916,14 +916,17 b' def _onfilemergefailure(ui):'
916 _haltmerge()
916 _haltmerge()
917 # default action is 'continue', in which case we neither prompt nor halt
917 # default action is 'continue', in which case we neither prompt nor halt
918
918
919 def hasconflictmarkers(data):
920 return bool(re.search("^(<<<<<<< .*|=======|>>>>>>> .*)$", data,
921 re.MULTILINE))
922
919 def _check(repo, r, ui, tool, fcd, files):
923 def _check(repo, r, ui, tool, fcd, files):
920 fd = fcd.path()
924 fd = fcd.path()
921 unused, unused, unused, back = files
925 unused, unused, unused, back = files
922
926
923 if not r and (_toolbool(ui, tool, "checkconflicts") or
927 if not r and (_toolbool(ui, tool, "checkconflicts") or
924 'conflicts' in _toollist(ui, tool, "check")):
928 'conflicts' in _toollist(ui, tool, "check")):
925 if re.search("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcd.data(),
929 if hasconflictmarkers(fcd.data()):
926 re.MULTILINE):
927 r = 1
930 r = 1
928
931
929 checked = False
932 checked = False
@@ -373,4 +373,53 b' resolve -l should be empty'
373
373
374 $ hg resolve -l
374 $ hg resolve -l
375
375
376 resolve -m can be configured to look for remaining conflict markers
377 $ hg up -qC 2
378 $ hg merge -q --tool=internal:merge 1
379 warning: conflicts while merging file1! (edit, then use 'hg resolve --mark')
380 warning: conflicts while merging file2! (edit, then use 'hg resolve --mark')
381 [1]
382 $ hg resolve -l
383 U file1
384 U file2
385 $ echo 'remove markers' > file1
386 $ hg --config experimental.resolve.mark-check=abort resolve -m
387 warning: the following files still have conflict markers:
388 file2
389 abort: conflict markers detected
390 (use --all to mark anyway)
391 [255]
392 $ hg resolve -l
393 U file1
394 U file2
395 Try with --all from the hint
396 $ hg --config experimental.resolve.mark-check=abort resolve -m --all
397 warning: the following files still have conflict markers:
398 file2
399 (no more unresolved files)
400 $ hg resolve -l
401 R file1
402 R file2
403 $ hg resolve --unmark
404 $ hg resolve -l
405 U file1
406 U file2
407 $ hg --config experimental.resolve.mark-check=warn resolve -m
408 warning: the following files still have conflict markers:
409 file2
410 (no more unresolved files)
411 $ hg resolve -l
412 R file1
413 R file2
414 If the file is already marked as resolved, we don't warn about it
415 $ hg resolve --unmark file1
416 $ hg resolve -l
417 U file1
418 R file2
419 $ hg --config experimental.resolve.mark-check=warn resolve -m
420 (no more unresolved files)
421 $ hg resolve -l
422 R file1
423 R file2
424
376 $ cd ..
425 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now