##// END OF EJS Templates
upgrade: support the --quiet flag...
upgrade: support the --quiet flag The command is currently very verbose with a various bit of output being time sensitive or randomized. The make invocation bulky and hard to match in the test. We move various message from `ui.write` to `ui.status` in order for the `--quiet` flag to have effect and helps the situation. As a side benefit, we can replace the various redirection to > /dev/null with the --quiet flag. Differential Revision: https://phab.mercurial-scm.org/D8429

File last commit:

r43347:687b865b default
r45302:e295ba23 default
Show More
diffutil.py
136 lines | 4.5 KiB | text/x-python | PythonLexer
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 # diffutil.py - utility functions related to diff and patch
#
# Copyright 2006 Brendan Cully <brendan@kublai.com>
# Copyright 2007 Chris Mason <chris.mason@oracle.com>
# Copyright 2018 Octobus <octobus@octobus.net>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
from .i18n import _
from . import (
mdiff,
pycompat,
)
Augie Fackler
formatting: blacken the codebase...
r43346
def diffallopts(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 ui, opts=None, untrusted=False, section=b'diff', configprefix=b''
Augie Fackler
formatting: blacken the codebase...
r43346 ):
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 '''return diffopts with all features supported and parsed'''
Augie Fackler
formatting: blacken the codebase...
r43346 return difffeatureopts(
ui,
opts=opts,
untrusted=untrusted,
section=section,
git=True,
whitespace=True,
formatchanging=True,
configprefix=configprefix,
)
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
Augie Fackler
formatting: blacken the codebase...
r43346
def difffeatureopts(
ui,
opts=None,
untrusted=False,
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 section=b'diff',
Augie Fackler
formatting: blacken the codebase...
r43346 git=False,
whitespace=False,
formatchanging=False,
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 configprefix=b'',
Augie Fackler
formatting: blacken the codebase...
r43346 ):
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 '''return diffopts with only opted-in features parsed
Features:
- git: git-style diffs
- whitespace: whitespace options like ignoreblanklines and ignorews
- formatchanging: options that will likely break or cause correctness issues
with most diff parsers
'''
Augie Fackler
formatting: blacken the codebase...
r43346
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 def get(key, name=None, getter=ui.configbool, forceplain=None):
if opts:
v = opts.get(key)
# diffopts flags are either None-default (which is passed
# through unchanged, so we can identify unset values), or
# some other falsey default (eg --unified, which defaults
# to an empty string). We only want to override the config
# entries from hgrc with command line values if they
# appear to have been set, which is any truthy value,
# True, or False.
if v or isinstance(v, bool):
return v
if forceplain is not None and ui.plain():
return forceplain
Augie Fackler
formatting: blacken the codebase...
r43346 return getter(
section, configprefix + (name or key), untrusted=untrusted
)
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
# core options, expected to be understood by every diff parser
buildopts = {
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'nodates': get(b'nodates'),
b'showfunc': get(b'show_function', b'showfunc'),
b'context': get(b'unified', getter=ui.config),
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 }
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'xdiff'] = ui.configbool(b'experimental', b'xdiff')
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
if git:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'git'] = get(b'git')
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
# since this is in the experimental section, we need to call
# ui.configbool directory
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'showsimilarity'] = ui.configbool(
b'experimental', b'extendedheader.similarity'
Augie Fackler
formatting: blacken the codebase...
r43346 )
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
# need to inspect the ui object instead of using get() since we want to
# test for an int
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 hconf = ui.config(b'experimental', b'extendedheader.index')
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 if hconf is not None:
hlen = None
try:
# the hash config could be an integer (for length of hash) or a
# word (e.g. short, full, none)
hlen = int(hconf)
if hlen < 0 or hlen > 40:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 msg = _(b"invalid length for extendedheader.index: '%d'\n")
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 ui.warn(msg % hlen)
except ValueError:
# default value
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if hconf == b'short' or hconf == b'':
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 hlen = 12
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif hconf == b'full':
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 hlen = 40
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif hconf != b'none':
msg = _(b"invalid value for extendedheader.index: '%s'\n")
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 ui.warn(msg % hconf)
finally:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'index'] = hlen
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
if whitespace:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'ignorews'] = get(b'ignore_all_space', b'ignorews')
buildopts[b'ignorewsamount'] = get(
b'ignore_space_change', b'ignorewsamount'
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'ignoreblanklines'] = get(
b'ignore_blank_lines', b'ignoreblanklines'
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'ignorewseol'] = get(b'ignore_space_at_eol', b'ignorewseol')
Yuya Nishihara
diffutil: move the module out of utils package...
r38607 if formatchanging:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'text'] = opts and opts.get(b'text')
binary = None if opts is None else opts.get(b'binary')
buildopts[b'nobinary'] = (
Augie Fackler
formatting: blacken the codebase...
r43346 not binary
if binary is not None
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 else get(b'nobinary', forceplain=False)
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 buildopts[b'noprefix'] = get(b'noprefix', forceplain=False)
buildopts[b'worddiff'] = get(
b'word_diff', b'word-diff', forceplain=False
)
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
return mdiff.diffopts(**pycompat.strkwargs(buildopts))