view tests/autodiff.py @ 47807:bc74cb9a8e40 stable

pager: account for flakiness in Windows output This test case is cursed and probably not worth losing more time over. This makes apparent what the intended behavior is while still removing the flakiness from the CI. Differential Revision: https://phab.mercurial-scm.org/D11257
author Raphaël Gomès <rgomes@octobus.net>
date Thu, 05 Aug 2021 18:25:35 +0200
parents 2372284d9457
children b74e128676d4
line wrap: on
line source

# Extension dedicated to test patch.diff() upgrade modes

from __future__ import absolute_import

from mercurial import (
    error,
    patch,
    pycompat,
    registrar,
    scmutil,
)

cmdtable = {}
command = registrar.command(cmdtable)


@command(
    b'autodiff',
    [(b'', b'git', b'', b'git upgrade mode (yes/no/auto/warn/abort)')],
    b'[OPTION]... [FILE]...',
)
def autodiff(ui, repo, *pats, **opts):
    opts = pycompat.byteskwargs(opts)
    diffopts = patch.difffeatureopts(ui, opts)
    git = opts.get(b'git', b'no')
    brokenfiles = set()
    losedatafn = None
    if git in (b'yes', b'no'):
        diffopts.git = git == b'yes'
        diffopts.upgrade = False
    elif git == b'auto':
        diffopts.git = False
        diffopts.upgrade = True
    elif git == b'warn':
        diffopts.git = False
        diffopts.upgrade = True

        def losedatafn(fn=None, **kwargs):
            brokenfiles.add(fn)
            return True

    elif git == b'abort':
        diffopts.git = False
        diffopts.upgrade = True

        def losedatafn(fn=None, **kwargs):
            raise error.Abort(b'losing data for %s' % fn)

    else:
        raise error.Abort(b'--git must be yes, no or auto')

    ctx1, ctx2 = scmutil.revpair(repo, [])
    m = scmutil.match(ctx2, pats, opts)
    it = patch.diff(
        repo,
        ctx1.node(),
        ctx2.node(),
        match=m,
        opts=diffopts,
        losedatafn=losedatafn,
    )
    for chunk in it:
        ui.write(chunk)
    for fn in sorted(brokenfiles):
        ui.write((b'data lost for: %s\n' % fn))