[PATCH 3 of 3 v2] filemerge: exclude some markup languages from conflict marker detection

Augie Fackler raf at durin42.com
Sun Aug 31 03:46:14 CDT 2014


On Aug 31, 2014, at 9:56 AM, Gregory Szorc <gregory.szorc at gmail.com> wrote:

> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1409470817 -7200
> #      Sun Aug 31 09:40:17 2014 +0200
> # Node ID ab2e712ecf4e79a59c7985359b00d21d0d39cfd6
> # Parent  35c1d268bbd092ffb15b85605b4f5d36c3d08986
> filemerge: exclude some markup languages from conflict marker detection
> 
> Detection of conflict markers looks for the '=======' string, which may
> occur in markup languages such as markdown and restructured text.
> We omit this part of conflict marker detection for these files.
> 
> diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
> --- a/mercurial/filemerge.py
> +++ b/mercurial/filemerge.py
> @@ -464,11 +464,25 @@ def filemerge(repo, mynode, orig, fcd, f
>     util.unlink(b)
>     util.unlink(c)
>     return r
> 
> +_includeequals = (
> +    '.markdown',
> +    '.md',
> +    '.rst',
> +)

This worries me a little, since it's a hardcoded list (rather than configurable).

Maybe we could look at the base texts for left and right and only warn if the base text doesn't look like it contains conflict markers?

> +
> def hasconflictmarkers(fctx):
>     """Whether data from a filecontext has conflict markers."""
> -    return re.search("^(<<<<<<< .*|=======|>>>>>>> .*)$", fctx.data(),
> -                     re.MULTILINE)
> +    path = fctx.path()
> +    regexp = '^(<<<<<<< .*|>>>>>>> .*'
> +    # Some files commonly contain "=======". We try to avoid false positives.
> +    for suffix in _includeequals:
> +        if path.endswith(suffix):
> +            regexp += '|======='
> +            break
> +    regexp += ')$'
> +
> +    return re.search(regexp, fctx.data(), re.MULTILINE)
> 
> # tell hggettext to extract docstrings from these functions:
> i18nfunctions = internals.values()
> diff --git a/tests/test-resolve.t b/tests/test-resolve.t
> --- a/tests/test-resolve.t
> +++ b/tests/test-resolve.t
> @@ -81,4 +81,45 @@ conflict markers in file marked as resol
>> EOF
>   $ hg resolve -m file
>   (file appears to contain conflict markers; did you intend to mark as resolved?)
>   (no more unresolved files)
> +
> +  $ cd ..
> +
> +conflict marker warning is ignored for files with those patterns
> +
> +  $ hg init markdown
> +  $ cd markdown
> +  $ cat >> readme.md << EOF
> +  > == Index
> +  > Hello
> +  > ========= Another section
> +  > more content
> +  > EOF
> +  $ cat >> readme.rst << EOF
> +  > ========
> +  > My Index
> +  > ========
> +  > EOF
> +  $ hg commit -A -m 'add readme'
> +  adding readme.md
> +  adding readme.rst
> +  $ echo 'even more content' >> readme.md
> +  $ echo 'even more content' >> readme.rst
> +  $ hg commit -m 'append readme'
> +
> +  $ hg up -r 0
> +  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ echo 'alternative content' >> readme.md
> +  $ echo 'alternative content' >> readme.rst
> +  $ hg commit -m 'other append'
> +  created new head
> +
> +  $ hg merge --tool=internal:fail
> +  0 files updated, 0 files merged, 0 files removed, 2 files unresolved
> +  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
> +  [1]
> +
> +  $ hg resolve -m
> +  (no more unresolved files)
> +
> +  $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20140831/ed8491db/attachment.pgp>


More information about the Mercurial-devel mailing list