mercurial/diffutil.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Mon, 26 Jun 2023 11:21:43 +0100
branchstable
changeset 50720 bfbd84c57bda
parent 50252 a6b8b1ab9116
child 51185 d6e5bec550f1
permissions -rw-r--r--
dirstate-v2: actually fix the dirstate-v2 upgrade race It looks like the previous fix for the dirstate-v2 upgrade race didn't work. The problem is that it only recovers in case the size of the v1 `dirstate` file is smaller than the `v2` one, whereas in real life it's always larger. This commit changes the test to be more realistic, which reveals the crash, and changes the code to fix the crash.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38563
c88d2c9b00dd diffutil: extract diff options code into a dedicated util-module
Boris Feld <boris.feld@octobus.net>
parents: 38497
diff changeset
     1
# diffutil.py - utility functions related to diff and patch
2861
0f08f2c042ec Move patch-related code into its own module.
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
     2
#
2865
71e78f2ca5ae merge git patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2863
diff changeset
     3
# Copyright 2006 Brendan Cully <brendan@kublai.com>
4897
4574925db5c0 Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4778
diff changeset
     4
# Copyright 2007 Chris Mason <chris.mason@oracle.com>
38563
c88d2c9b00dd diffutil: extract diff options code into a dedicated util-module
Boris Feld <boris.feld@octobus.net>
parents: 38497
diff changeset
     5
# Copyright 2018 Octobus <octobus@octobus.net>
2865
71e78f2ca5ae merge git patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2863
diff changeset
     6
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8209
diff changeset
     7
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10203
diff changeset
     8
# GNU General Public License version 2 or any later version.
2861
0f08f2c042ec Move patch-related code into its own module.
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
     9
49705
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    10
import typing
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    11
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    12
from typing import (
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    13
    Any,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    14
    Dict,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    15
    Optional,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    16
)
14370
17cea10c343e patch: add a workingbackend dirstate layer on top of fsbackend
Patrick Mezard <pmezard@gmail.com>
parents: 14369
diff changeset
    17
38589
1c93e0237a24 diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents: 38588
diff changeset
    18
from .i18n import _
24269
9a745ced79a9 record: move filterpatch from record to patch
Laurent Charignon <lcharignon@fb.com>
parents: 24268
diff changeset
    19
38589
1c93e0237a24 diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents: 38588
diff changeset
    20
from . import (
38563
c88d2c9b00dd diffutil: extract diff options code into a dedicated util-module
Boris Feld <boris.feld@octobus.net>
parents: 38497
diff changeset
    21
    mdiff,
c88d2c9b00dd diffutil: extract diff options code into a dedicated util-module
Boris Feld <boris.feld@octobus.net>
parents: 38497
diff changeset
    22
    pycompat,
c88d2c9b00dd diffutil: extract diff options code into a dedicated util-module
Boris Feld <boris.feld@octobus.net>
parents: 38497
diff changeset
    23
)
7198
df79ee9b6278 patch: extract local function addmodehdr
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7186
diff changeset
    24
49705
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    25
if typing.TYPE_CHECKING:
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    26
    from . import ui as uimod
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    27
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    28
# TODO: narrow the value after the config module is typed
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    29
_Opts = Dict[bytes, Any]
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    30
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    31
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    32
def diffallopts(
49705
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    33
    ui: "uimod.ui",
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    34
    opts: Optional[_Opts] = None,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    35
    untrusted: bool = False,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    36
    section: bytes = b'diff',
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    37
    configprefix: bytes = b'',
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    38
) -> mdiff.diffopts:
23430
3821be85fd4d patch: add a new function to initialize diffopts by feature
Siddharth Agarwal <sid0@fb.com>
parents: 23429
diff changeset
    39
    '''return diffopts with all features supported and parsed'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    40
    return difffeatureopts(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    41
        ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    42
        opts=opts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    43
        untrusted=untrusted,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    44
        section=section,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    45
        git=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    46
        whitespace=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    47
        formatchanging=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    48
        configprefix=configprefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    49
    )
23430
3821be85fd4d patch: add a new function to initialize diffopts by feature
Siddharth Agarwal <sid0@fb.com>
parents: 23429
diff changeset
    50
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    51
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    52
def difffeatureopts(
49705
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    53
    ui: "uimod.ui",
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    54
    opts: Optional[_Opts] = None,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    55
    untrusted: bool = False,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    56
    section: bytes = b'diff',
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    57
    git: bool = False,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    58
    whitespace: bool = False,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    59
    formatchanging: bool = False,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    60
    configprefix: bytes = b'',
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    61
) -> mdiff.diffopts:
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    62
    """return diffopts with only opted-in features parsed
23432
27af986a332b patch.difffeatureopts: add a feature for diff.git
Siddharth Agarwal <sid0@fb.com>
parents: 23431
diff changeset
    63
27af986a332b patch.difffeatureopts: add a feature for diff.git
Siddharth Agarwal <sid0@fb.com>
parents: 23431
diff changeset
    64
    Features:
27af986a332b patch.difffeatureopts: add a feature for diff.git
Siddharth Agarwal <sid0@fb.com>
parents: 23431
diff changeset
    65
    - git: git-style diffs
23433
41dd76b3facb patch.difffeatureopts: add a feature for whitespace diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23432
diff changeset
    66
    - whitespace: whitespace options like ignoreblanklines and ignorews
23434
60300a4c0ae5 patch.difffeatureopts: add a feature for format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23433
diff changeset
    67
    - formatchanging: options that will likely break or cause correctness issues
60300a4c0ae5 patch.difffeatureopts: add a feature for format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23433
diff changeset
    68
      with most diff parsers
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    69
    """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    70
49705
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    71
    def get(
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    72
        key: bytes,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    73
        name: Optional[bytes] = None,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    74
        getter=ui.configbool,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    75
        forceplain: Optional[bool] = None,
b8cac4e37100 typing: add typehints to mercurial/diffutil.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
    76
    ) -> Any:
23295
ac072c79bd9d patch.diffopts: break get function into if statements
Siddharth Agarwal <sid0@fb.com>
parents: 22460
diff changeset
    77
        if opts:
ac072c79bd9d patch.diffopts: break get function into if statements
Siddharth Agarwal <sid0@fb.com>
parents: 22460
diff changeset
    78
            v = opts.get(key)
29952
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    79
            # diffopts flags are either None-default (which is passed
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    80
            # through unchanged, so we can identify unset values), or
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    81
            # some other falsey default (eg --unified, which defaults
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    82
            # to an empty string). We only want to override the config
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    83
            # entries from hgrc with command line values if they
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    84
            # appear to have been set, which is any truthy value,
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    85
            # True, or False.
e40343ce9c4c diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com>
parents: 29904
diff changeset
    86
            if v or isinstance(v, bool):
23295
ac072c79bd9d patch.diffopts: break get function into if statements
Siddharth Agarwal <sid0@fb.com>
parents: 22460
diff changeset
    87
                return v
23296
922fcfb02e77 patch.diffopts: allow a setting to be forced in plain mode
Siddharth Agarwal <sid0@fb.com>
parents: 23295
diff changeset
    88
        if forceplain is not None and ui.plain():
922fcfb02e77 patch.diffopts: allow a setting to be forced in plain mode
Siddharth Agarwal <sid0@fb.com>
parents: 23295
diff changeset
    89
            return forceplain
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    90
        return getter(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    91
            section, configprefix + (name or key), untrusted=untrusted
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
    92
        )
23295
ac072c79bd9d patch.diffopts: break get function into if statements
Siddharth Agarwal <sid0@fb.com>
parents: 22460
diff changeset
    93
23434
60300a4c0ae5 patch.difffeatureopts: add a feature for format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23433
diff changeset
    94
    # core options, expected to be understood by every diff parser
23429
f35526b999f4 patch.diffopts: use a dict for initialization
Siddharth Agarwal <sid0@fb.com>
parents: 23300
diff changeset
    95
    buildopts = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    96
        b'nodates': get(b'nodates'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    97
        b'showfunc': get(b'show_function', b'showfunc'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    98
        b'context': get(b'unified', getter=ui.config),
23429
f35526b999f4 patch.diffopts: use a dict for initialization
Siddharth Agarwal <sid0@fb.com>
parents: 23300
diff changeset
    99
    }
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   100
    buildopts[b'xdiff'] = ui.configbool(b'experimental', b'xdiff')
23429
f35526b999f4 patch.diffopts: use a dict for initialization
Siddharth Agarwal <sid0@fb.com>
parents: 23300
diff changeset
   101
23432
27af986a332b patch.difffeatureopts: add a feature for diff.git
Siddharth Agarwal <sid0@fb.com>
parents: 23431
diff changeset
   102
    if git:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   103
        buildopts[b'git'] = get(b'git')
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   104
30806
e2796f193f06 patch: add similarity config knob in experimental section
Sean Farley <sean@farley.io>
parents: 30790
diff changeset
   105
        # since this is in the experimental section, we need to call
e2796f193f06 patch: add similarity config knob in experimental section
Sean Farley <sean@farley.io>
parents: 30790
diff changeset
   106
        # ui.configbool directory
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   107
        buildopts[b'showsimilarity'] = ui.configbool(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   108
            b'experimental', b'extendedheader.similarity'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   109
        )
30806
e2796f193f06 patch: add similarity config knob in experimental section
Sean Farley <sean@farley.io>
parents: 30790
diff changeset
   110
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   111
        # need to inspect the ui object instead of using get() since we want to
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   112
        # test for an int
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   113
        hconf = ui.config(b'experimental', b'extendedheader.index')
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   114
        if hconf is not None:
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   115
            hlen = None
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   116
            try:
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   117
                # the hash config could be an integer (for length of hash) or a
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   118
                # word (e.g. short, full, none)
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   119
                hlen = int(hconf)
30819
897726622877 patch: check length of git index header only if integer is specified
Yuya Nishihara <yuya@tcha.org>
parents: 30808
diff changeset
   120
                if hlen < 0 or hlen > 40:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   121
                    msg = _(b"invalid length for extendedheader.index: '%d'\n")
30819
897726622877 patch: check length of git index header only if integer is specified
Yuya Nishihara <yuya@tcha.org>
parents: 30808
diff changeset
   122
                    ui.warn(msg % hlen)
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   123
            except ValueError:
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   124
                # default value
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   125
                if hconf == b'short' or hconf == b'':
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   126
                    hlen = 12
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   127
                elif hconf == b'full':
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   128
                    hlen = 40
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   129
                elif hconf != b'none':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   130
                    msg = _(b"invalid value for extendedheader.index: '%s'\n")
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   131
                    ui.warn(msg % hconf)
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   132
            finally:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   133
                buildopts[b'index'] = hlen
30788
d1901c4c8ec0 patch: add config knob for displaying the index header
Sean Farley <sean@farley.io>
parents: 30417
diff changeset
   134
23433
41dd76b3facb patch.difffeatureopts: add a feature for whitespace diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23432
diff changeset
   135
    if whitespace:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   136
        buildopts[b'ignorews'] = get(b'ignore_all_space', b'ignorews')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   137
        buildopts[b'ignorewsamount'] = get(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   138
            b'ignore_space_change', b'ignorewsamount'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   139
        )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   140
        buildopts[b'ignoreblanklines'] = get(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   141
            b'ignore_blank_lines', b'ignoreblanklines'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   142
        )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   143
        buildopts[b'ignorewseol'] = get(b'ignore_space_at_eol', b'ignorewseol')
23434
60300a4c0ae5 patch.difffeatureopts: add a feature for format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23433
diff changeset
   144
    if formatchanging:
49974
024e0580b853 diffutil: rewrite an ersatz ternary operator for building diffopts.text
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
   145
        buildopts[b'text'] = None if opts is None else opts.get(b'text')
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   146
        binary = None if opts is None else opts.get(b'binary')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   147
        buildopts[b'nobinary'] = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   148
            not binary
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   149
            if binary is not None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   150
            else get(b'nobinary', forceplain=False)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41573
diff changeset
   151
        )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   152
        buildopts[b'noprefix'] = get(b'noprefix', forceplain=False)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   153
        buildopts[b'worddiff'] = get(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   154
            b'word_diff', b'word-diff', forceplain=False
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   155
        )
23432
27af986a332b patch.difffeatureopts: add a feature for diff.git
Siddharth Agarwal <sid0@fb.com>
parents: 23431
diff changeset
   156
31636
a7acda2de4b8 diff: use pycompat.{byteskwargs, strkwargs} to switch opts b/w bytes and str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31635
diff changeset
   157
    return mdiff.diffopts(**pycompat.strkwargs(buildopts))