##// END OF EJS Templates
subrepo: introduce a `repo_rel_or_abs_source` function...
subrepo: introduce a `repo_rel_or_abs_source` function The `subrepoutil` module has various function to compute the path of a sub-repository compared to the root of the top repository. However, they was no function available to compute the relative path of the repository "source". And we need this information for exchange operation (in our case, `hg outgoing`). The information is currently build using the `repo._subtoppath` hack. We reuse the same logic but in a dedicated function independent of the `repo._subtoppath` hack. Differential Revision: https://phab.mercurial-scm.org/D10434

File last commit:

r46554:89a2afe3 default
r47691:5a59a0ed 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 ):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """return diffopts with only opted-in features parsed
Yuya Nishihara
diffutil: move the module out of utils package...
r38607
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
formating: upgrade to black 20.8b1...
r46554 """
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))