mercurial/debugcommands.py
author Raphaël Gomès <rgomes@octobus.net>
Fri, 23 Feb 2024 15:18:29 +0100
branchstable
changeset 51440 d1d48d18db37
parent 51400 e2dfa403452d
child 51555 15e680a44502
permissions -rw-r--r--
relnotes: add 6.7rc0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     1
# debugcommands.py - command processing for debug* commands
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     2
#
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46805
diff changeset
     3
# Copyright 2005-2016 Olivia Mackall <olivia@selenic.com>
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     4
#
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     7
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     8
47674
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47568
diff changeset
     9
import binascii
34129
902219a99901 debuginstall: use codecs.lookup() to detect invalid encoding
Yuya Nishihara <yuya@tcha.org>
parents: 34120
diff changeset
    10
import codecs
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
    11
import collections
46769
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
    12
import contextlib
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
    13
import difflib
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    14
import errno
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
    15
import glob
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
    16
import operator
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
    17
import os
44145
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
    18
import platform
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    19
import random
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
    20
import re
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    21
import socket
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
    22
import ssl
36781
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36778
diff changeset
    23
import stat
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
    24
import subprocess
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    25
import sys
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    26
import time
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    27
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    28
from .i18n import _
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    29
from .node import (
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
    30
    bin,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    31
    hex,
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
    32
    nullrev,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    33
    short,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    34
)
43089
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
    35
from .pycompat import (
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
    36
    open,
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
    37
)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    38
from . import (
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    39
    bundle2,
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
    40
    bundlerepo,
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    41
    changegroup,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    42
    cmdutil,
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
    43
    color,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    44
    context,
41515
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
    45
    copies,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    46
    dagparser,
49152
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
    47
    dirstateutils,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    48
    encoding,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    49
    error,
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    50
    exchange,
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
    51
    extensions,
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
    52
    filelog,
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
    53
    filemerge,
38805
b9162ea1b815 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38802
diff changeset
    54
    filesetlang,
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
    55
    formatter,
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    56
    hg,
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
    57
    httppeer,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    58
    localrepo,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    59
    lock as lockmod,
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35730
diff changeset
    60
    logcmdutil,
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
    61
    manifest,
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
    62
    mergestate as mergestatemod,
45665
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
    63
    metadata,
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
    64
    obsolete,
33142
4f49810a1011 obsutil: move 'successorssets' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33107
diff changeset
    65
    obsutil,
43633
0b7733719d21 utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
    66
    pathutil,
32745
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
    67
    phases,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    68
    policy,
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
    69
    pvec,
30519
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30518
diff changeset
    70
    pycompat,
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32315
diff changeset
    71
    registrar,
30775
513d68a90398 repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30774
diff changeset
    72
    repair,
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
    73
    repoview,
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
    74
    requirements,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    75
    revlog,
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
    76
    revset,
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
    77
    revsetlang,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    78
    scmutil,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    79
    setdiscovery,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    80
    simplemerge,
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
    81
    sshpeer,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    82
    sslutil,
30502
6da030496667 debugcommands: move debug{create,apply}streambundleclone to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30501
diff changeset
    83
    streamclone,
45865
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45819
diff changeset
    84
    strip,
44290
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
    85
    tags as tagsmod,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    86
    templater,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    87
    treediscovery,
31864
70d163b86316 upgrade: extract code in its own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31689
diff changeset
    88
    upgrade,
35562
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
    89
    url as urlmod,
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
    90
    util,
49826
c84844cd523a verify: also check dirstate
Raphaël Gomès <rgomes@octobus.net>
parents: 49824
diff changeset
    91
    verify,
31239
9cdba6072b97 vfs: use 'vfs' module directly in 'mercurial.debugcommand'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31216
diff changeset
    92
    vfs as vfsmod,
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
    93
    wireprotoframing,
36527
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
    94
    wireprotoserver,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    95
)
47298
e96f75857361 updatecaches: use the caches argument in `hg debugupdatecaches`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47139
diff changeset
    96
from .interfaces import repository
50392
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
    97
from .stabletailgraph import stabletailsort
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
    98
from .utils import (
39449
e5eb67dea6e8 debugcommands: use our CBOR decoder
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39378
diff changeset
    99
    cborutil,
42041
3e47d1ec9da5 util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42035
diff changeset
   100
    compression,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
   101
    dateutil,
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   102
    procutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
   103
    stringutil,
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
   104
    urlutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
   105
)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   106
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
   107
from .revlogutils import (
49250
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
   108
    debug as revlog_debug,
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
   109
    nodemap,
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
   110
    rewrite,
45665
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   111
    sidedata,
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
   112
)
39330
655b5b465953 revlog: split functionality related to deltas computation in a new module
Boris Feld <boris.feld@octobus.net>
parents: 39282
diff changeset
   113
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   114
release = lockmod.release
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   115
45865
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45819
diff changeset
   116
table = {}
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45819
diff changeset
   117
table.update(strip.command._table)
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45819
diff changeset
   118
command = registrar.command(table)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   119
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   120
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   121
@command(b'debugancestor', [], _(b'[INDEX] REV1 REV2'), optionalrepo=True)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   122
def debugancestor(ui, repo, *args):
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   123
    """find the ancestor revision of two revisions in a given index"""
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   124
    if len(args) == 3:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   125
        index, rev1, rev2 = args
39818
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 39760
diff changeset
   126
        r = revlog.revlog(vfsmod.vfs(encoding.getcwd(), audit=False), index)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   127
        lookup = r.lookup
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   128
    elif len(args) == 2:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   129
        if not repo:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   130
            raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
   131
                _(b'there is no Mercurial repository here (.hg not found)')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   132
            )
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   133
        rev1, rev2 = args
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   134
        r = repo.changelog
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   135
        lookup = repo.lookup
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   136
    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   137
        raise error.Abort(_(b'either two or three arguments required'))
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   138
    a = r.ancestor(lookup(rev1), lookup(rev2))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   139
    ui.write(b'%d:%s\n' % (r.rev(a), hex(a)))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   140
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   141
45149
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   142
@command(b'debugantivirusrunning', [])
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   143
def debugantivirusrunning(ui, repo):
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   144
    """attempt to trigger an antivirus scanner to see if one is active"""
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   145
    with repo.cachevfs.open('eicar-test-file.com', b'wb') as f:
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   146
        f.write(
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   147
            util.b85decode(
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   148
                # This is a base85-armored version of the EICAR test file. See
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   149
                # https://en.wikipedia.org/wiki/EICAR_test_file for details.
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   150
                b'ST#=}P$fV?P+K%yP+C|uG$>GBDK|qyDK~v2MM*<JQY}+dK~6+LQba95P'
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   151
                b'E<)&Nm5l)EmTEQR4qnHOhq9iNGnJx'
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   152
            )
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   153
        )
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   154
    # Give an AV engine time to scan the file.
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   155
    time.sleep(2)
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   156
    util.unlink(repo.cachevfs.join('eicar-test-file.com'))
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   157
87047efbc6a6 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com>
parents: 45107
diff changeset
   158
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   159
@command(b'debugapplystreamclonebundle', [], b'FILE')
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   160
def debugapplystreamclonebundle(ui, repo, fname):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   161
    """apply a stream clone bundle file"""
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   162
    f = hg.openpath(ui, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   163
    gen = exchange.readbundle(ui, f, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   164
    gen.apply(repo)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   165
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   166
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   167
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   168
    b'debugbuilddag',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   169
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   170
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   171
            b'm',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   172
            b'mergeable-file',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   173
            None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   174
            _(b'add single file mergeable changes'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   175
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   176
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   177
            b'o',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   178
            b'overwritten-file',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   179
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   180
            _(b'add single file all revs overwrite'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   181
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   182
        (b'n', b'new-file', None, _(b'add new file at each rev')),
48691
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   183
        (
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   184
            b'',
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   185
            b'from-existing',
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   186
            None,
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   187
            _(b'continue from a non-empty repository'),
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   188
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   189
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   190
    _(b'[OPTION]... [TEXT]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   191
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   192
def debugbuilddag(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   193
    ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   194
    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   195
    text=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   196
    mergeable_file=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   197
    overwritten_file=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   198
    new_file=False,
48691
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   199
    from_existing=False,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   200
):
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   201
    """builds a repo with a given DAG from scratch in the current empty repo
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   202
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   203
    The description of the DAG is read from stdin if not given on the
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   204
    command line.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   205
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   206
    Elements:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   207
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   208
     - "+n" is a linear run of n nodes based on the current default parent
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   209
     - "." is a single node based on the current default parent
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   210
     - "$" resets the default parent to null (implied at the start);
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   211
           otherwise the default parent is always the last node created
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   212
     - "<p" sets the default parent to the backref p
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   213
     - "*p" is a fork at parent p, which is a backref
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   214
     - "*p1/p2" is a merge of parents p1 and p2, which are backrefs
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   215
     - "/p2" is a merge of the preceding node and p2
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   216
     - ":tag" defines a local tag for the preceding node
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   217
     - "@branch" sets the named branch for subsequent nodes
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   218
     - "#...\\n" is a comment up to the end of the line
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   219
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   220
    Whitespace between the above elements is ignored.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   221
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   222
    A backref is either
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   223
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   224
     - a number n, which references the node curr-n, where curr is the current
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   225
       node, or
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   226
     - the name of a local tag you placed earlier using ":tag", or
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   227
     - empty to denote the default parent.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   228
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   229
    All string valued-elements are either strictly alphanumeric, or must
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   230
    be enclosed in double quotes ("..."), with "\\" as escape character.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   231
    """
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   232
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   233
    if text is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   234
        ui.status(_(b"reading DAG from stdin\n"))
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   235
        text = ui.fin.read()
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   236
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   237
    cl = repo.changelog
48691
b4bc9c4f925d debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48562
diff changeset
   238
    if len(cl) > 0 and not from_existing:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   239
        raise error.Abort(_(b'repository is not empty'))
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   240
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   241
    # determine number of revs in DAG
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   242
    total = 0
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   243
    for type, data in dagparser.parsedag(text):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   244
        if type == b'n':
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   245
            total += 1
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   246
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   247
    if mergeable_file:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   248
        linesperrev = 2
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   249
        # make a file with k lines per rev
49284
d44e3c45f0e4 py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents: 49281
diff changeset
   250
        initialmergedlines = [b'%d' % i for i in range(0, total * linesperrev)]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   251
        initialmergedlines.append(b"")
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   252
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   253
    tags = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   254
    progress = ui.makeprogress(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   255
        _(b'building'), unit=_(b'revisions'), total=total
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   256
    )
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   257
    with progress, repo.wlock(), repo.lock(), repo.transaction(b"builddag"):
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   258
        at = -1
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   259
        atbranch = b'default'
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   260
        nodeids = []
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   261
        id = 0
38375
fce1c17493db debugbuilddag: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38355
diff changeset
   262
        progress.update(id)
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   263
        for type, data in dagparser.parsedag(text):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   264
            if type == b'n':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   265
                ui.note((b'node %s\n' % pycompat.bytestr(data)))
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   266
                id, ps = data
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   267
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   268
                files = []
35399
dffc35a5be9f debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com>
parents: 35395
diff changeset
   269
                filecontent = {}
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   270
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   271
                p2 = None
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   272
                if mergeable_file:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   273
                    fn = b"mf"
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   274
                    p1 = repo[ps[0]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   275
                    if len(ps) > 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   276
                        p2 = repo[ps[1]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   277
                        pa = p1.ancestor(p2)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   278
                        base, local, other = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   279
                            x[fn].data() for x in (pa, p1, p2)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   280
                        ]
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   281
                        m3 = simplemerge.Merge3Text(base, local, other)
48558
2dbee604a4f0 simplemerge: clarify names of functions that render conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents: 48557
diff changeset
   282
                        ml = [
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   283
                            l.strip()
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   284
                            for l in simplemerge.render_minimized(m3)[0]
48558
2dbee604a4f0 simplemerge: clarify names of functions that render conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents: 48557
diff changeset
   285
                        ]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   286
                        ml.append(b"")
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   287
                    elif at > 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   288
                        ml = p1[fn].data().split(b"\n")
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   289
                    else:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   290
                        ml = initialmergedlines
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   291
                    ml[id * linesperrev] += b" r%i" % id
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   292
                    mergedtext = b"\n".join(ml)
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   293
                    files.append(fn)
35399
dffc35a5be9f debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com>
parents: 35395
diff changeset
   294
                    filecontent[fn] = mergedtext
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   295
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   296
                if overwritten_file:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   297
                    fn = b"of"
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   298
                    files.append(fn)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   299
                    filecontent[fn] = b"r%i\n" % id
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   300
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   301
                if new_file:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   302
                    fn = b"nf%i" % id
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   303
                    files.append(fn)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   304
                    filecontent[fn] = b"r%i\n" % id
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   305
                    if len(ps) > 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   306
                        if not p2:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   307
                            p2 = repo[ps[1]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   308
                        for fn in p2:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   309
                            if fn.startswith(b"nf"):
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   310
                                files.append(fn)
35399
dffc35a5be9f debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com>
parents: 35395
diff changeset
   311
                                filecontent[fn] = p2[fn].data()
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   312
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   313
                def fctxfn(repo, cx, path):
35399
dffc35a5be9f debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com>
parents: 35395
diff changeset
   314
                    if path in filecontent:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   315
                        return context.memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   316
                            repo, cx, path, filecontent[path]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   317
                        )
35399
dffc35a5be9f debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com>
parents: 35395
diff changeset
   318
                    return None
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   319
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   320
                if len(ps) == 0 or ps[0] < 0:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   321
                    pars = [None, None]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   322
                elif len(ps) == 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   323
                    pars = [nodeids[ps[0]], None]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   324
                else:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   325
                    pars = [nodeids[p] for p in ps]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   326
                cx = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   327
                    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   328
                    pars,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   329
                    b"r%i" % id,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   330
                    files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   331
                    fctxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   332
                    date=(id, 0),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   333
                    user=b"debugbuilddag",
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   334
                    extra={b'branch': atbranch},
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   335
                )
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   336
                nodeid = repo.commitctx(cx)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   337
                nodeids.append(nodeid)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   338
                at = id
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   339
            elif type == b'l':
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   340
                id, name = data
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   341
                ui.note((b'tag %s\n' % name))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   342
                tags.append(b"%s %s\n" % (hex(repo.changelog.node(id)), name))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   343
            elif type == b'a':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   344
                ui.note((b'branch %s\n' % data))
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   345
                atbranch = data
38375
fce1c17493db debugbuilddag: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38355
diff changeset
   346
            progress.update(id)
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   347
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   348
        if tags:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   349
            repo.vfs.write(b"localtags", b"".join(tags))
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   350
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   351
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   352
def _debugchangegroup(ui, gen, all=None, indent=0, **opts):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   353
    indent_string = b' ' * indent
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   354
    if all:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
   355
        ui.writenoi18n(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   356
            b"%sformat: id, p1, p2, cset, delta base, len(delta)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   357
            % indent_string
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   358
        )
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   359
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   360
        def showchunks(named):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   361
            ui.write(b"\n%s%s\n" % (indent_string, named))
34292
311f6ccf8f23 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 34130
diff changeset
   362
            for deltadata in gen.deltaiter():
46711
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46663
diff changeset
   363
                node, p1, p2, cs, deltabase, delta, flags, sidedata = deltadata
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   364
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   365
                    b"%s%s %s %s %s %s %d\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   366
                    % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   367
                        indent_string,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   368
                        hex(node),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   369
                        hex(p1),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   370
                        hex(p2),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   371
                        hex(cs),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   372
                        hex(deltabase),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   373
                        len(delta),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   374
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   375
                )
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   376
43972
7a2c49a3cbae debug: drop unused variable assignments
Matt Harbison <matt_harbison@yahoo.com>
parents: 43878
diff changeset
   377
        gen.changelogheader()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   378
        showchunks(b"changelog")
43972
7a2c49a3cbae debug: drop unused variable assignments
Matt Harbison <matt_harbison@yahoo.com>
parents: 43878
diff changeset
   379
        gen.manifestheader()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   380
        showchunks(b"manifest")
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   381
        for chunkdata in iter(gen.filelogheader, {}):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   382
            fname = chunkdata[b'filename']
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   383
            showchunks(fname)
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   384
    else:
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   385
        if isinstance(gen, bundle2.unbundle20):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   386
            raise error.Abort(_(b'use debugbundle2 for this file'))
43972
7a2c49a3cbae debug: drop unused variable assignments
Matt Harbison <matt_harbison@yahoo.com>
parents: 43878
diff changeset
   387
        gen.changelogheader()
34292
311f6ccf8f23 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 34130
diff changeset
   388
        for deltadata in gen.deltaiter():
46711
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46663
diff changeset
   389
            node, p1, p2, cs, deltabase, delta, flags, sidedata = deltadata
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   390
            ui.write(b"%s%s\n" % (indent_string, hex(node)))
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   391
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   392
33029
b482d80e041b debugcommands: pass part, not read data, into _debugobsmarker()
Martin von Zweigbergk <martinvonz@google.com>
parents: 33028
diff changeset
   393
def _debugobsmarkers(ui, part, indent=0, **opts):
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   394
    """display version and markers contained in 'data'"""
33029
b482d80e041b debugcommands: pass part, not read data, into _debugobsmarker()
Martin von Zweigbergk <martinvonz@google.com>
parents: 33028
diff changeset
   395
    data = part.read()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   396
    indent_string = b' ' * indent
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   397
    try:
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   398
        version, markers = obsolete._readmarkers(data)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   399
    except error.UnknownVersion as exc:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   400
        msg = b"%sunsupported version: %s (%d bytes)\n"
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   401
        msg %= indent_string, exc.version, len(data)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   402
        ui.write(msg)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   403
    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   404
        msg = b"%sversion: %d (%d bytes)\n"
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   405
        msg %= indent_string, version, len(data)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   406
        ui.write(msg)
50944
2a7dba8658a7 debugbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50929
diff changeset
   407
        fm = ui.formatter(b'debugobsolete', pycompat.byteskwargs(opts))
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   408
        for rawmarker in sorted(markers):
33148
4e30168d7939 obsutil: move the 'marker' class to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33142
diff changeset
   409
            m = obsutil.marker(None, rawmarker)
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   410
            fm.startitem()
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   411
            fm.plain(indent_string)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   412
            cmdutil.showmarker(fm, m)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   413
        fm.end()
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   414
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   415
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   416
def _debugphaseheads(ui, data, indent=0):
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   417
    """display version and markers contained in 'data'"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   418
    indent_string = b' ' * indent
34320
12c42bcd4133 phases: move the binary decoding function in the phases module
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
   419
    headsbyphase = phases.binarydecode(data)
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   420
    for phase in phases.allphases:
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   421
        for head in headsbyphase[phase]:
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   422
            ui.write(indent_string)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   423
            ui.write(b'%s %s\n' % (hex(head), phases.phasenames[phase]))
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   424
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   425
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   426
def _quasirepr(thing):
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   427
    if isinstance(thing, (dict, util.sortdict, collections.OrderedDict)):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   428
        return b'{%s}' % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   429
            b', '.join(b'%s: %s' % (k, thing[k]) for k in sorted(thing))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   430
        )
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   431
    return pycompat.bytestr(repr(thing))
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   432
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   433
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   434
def _debugbundle2(ui, gen, all=None, **opts):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   435
    """lists the contents of a bundle2"""
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   436
    if not isinstance(gen, bundle2.unbundle20):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   437
        raise error.Abort(_(b'not a bundle2 file'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   438
    ui.write((b'Stream params: %s\n' % _quasirepr(gen.params)))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   439
    parttypes = opts.get('part_type', [])
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   440
    for part in gen.iterparts():
32694
3ef319e9505f debugbundle: add --part-type flag to emit only named part types
Danek Duvall <danek.duvall@oracle.com>
parents: 32626
diff changeset
   441
        if parttypes and part.type not in parttypes:
3ef319e9505f debugbundle: add --part-type flag to emit only named part types
Danek Duvall <danek.duvall@oracle.com>
parents: 32626
diff changeset
   442
            continue
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   443
        msg = b'%s -- %s (mandatory: %r)\n'
37841
d618558e4e8b debugbundle: also display if a part is mandatory or advisory
Boris Feld <boris.feld@octobus.net>
parents: 37823
diff changeset
   444
        ui.write((msg % (part.type, _quasirepr(part.params), part.mandatory)))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   445
        if part.type == b'changegroup':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   446
            version = part.params.get(b'version', b'01')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   447
            cg = changegroup.getunbundler(version, part, b'UN')
36951
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   448
            if not ui.quiet:
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   449
                _debugchangegroup(ui, cg, all=all, indent=4, **opts)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   450
        if part.type == b'obsmarkers':
36951
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   451
            if not ui.quiet:
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   452
                _debugobsmarkers(ui, part, indent=4, **opts)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   453
        if part.type == b'phase-heads':
36951
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   454
            if not ui.quiet:
c92d1d3c58ee debugbundle: do not display detailed part data in --quiet mode
Boris Feld <boris.feld@octobus.net>
parents: 36843
diff changeset
   455
                _debugphaseheads(ui, part, indent=4)
30502
6da030496667 debugcommands: move debug{create,apply}streambundleclone to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30501
diff changeset
   456
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   457
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   458
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   459
    b'debugbundle',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   460
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   461
        (b'a', b'all', None, _(b'show all details')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   462
        (b'', b'part-type', [], _(b'show only the named part type')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   463
        (b'', b'spec', None, _(b'print the bundlespec of the bundle')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   464
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   465
    _(b'FILE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   466
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   467
)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   468
def debugbundle(ui, bundlepath, all=None, spec=None, **opts):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   469
    """lists the contents of a bundle"""
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   470
    with hg.openpath(ui, bundlepath) as f:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   471
        if spec:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   472
            spec = exchange.getbundlespec(ui, f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   473
            ui.write(b'%s\n' % spec)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   474
            return
30502
6da030496667 debugcommands: move debug{create,apply}streambundleclone to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30501
diff changeset
   475
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   476
        gen = exchange.readbundle(ui, f, bundlepath)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   477
        if isinstance(gen, bundle2.unbundle20):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   478
            return _debugbundle2(ui, gen, all=all, **opts)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   479
        _debugchangegroup(ui, gen, all=all, **opts)
30503
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   480
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   481
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   482
@command(b'debugcapabilities', [], _(b'PATH'), norepo=True)
34959
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   483
def debugcapabilities(ui, path, **opts):
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   484
    """lists the capabilities of a remote peer"""
50945
ad9b7017ca22 debugcapabilities: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50944
diff changeset
   485
    peer = hg.peer(ui, pycompat.byteskwargs(opts), path)
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   486
    try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   487
        caps = peer.capabilities()
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   488
        ui.writenoi18n(b'Main capabilities:\n')
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   489
        for c in sorted(caps):
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   490
            ui.write(b'  %s\n' % c)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   491
        b2caps = bundle2.bundle2caps(peer)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   492
        if b2caps:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   493
            ui.writenoi18n(b'Bundle2 capabilities:\n')
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
   494
            for key, values in sorted(b2caps.items()):
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   495
                ui.write(b'  %s\n' % key)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   496
                for v in values:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   497
                    ui.write(b'    %s\n' % v)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   498
    finally:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
   499
        peer.close()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   500
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   501
46479
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   502
@command(
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   503
    b'debugchangedfiles',
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   504
    [
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   505
        (
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   506
            b'',
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   507
            b'compute',
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   508
            False,
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   509
            b"compute information instead of reading it from storage",
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   510
        ),
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   511
    ],
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   512
    b'REV',
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   513
)
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   514
def debugchangedfiles(ui, repo, rev, **opts):
45665
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   515
    """list the stored files changes for a revision"""
48118
5105a9975407 errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48116
diff changeset
   516
    ctx = logcmdutil.revsingle(repo, rev, None)
46479
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   517
    files = None
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   518
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   519
    if opts['compute']:
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   520
        files = metadata.compute_all_files_changes(ctx)
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   521
    else:
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   522
        sd = repo.changelog.sidedata(ctx.rev())
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   523
        files_block = sd.get(sidedata.SD_FILES)
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   524
        if files_block is not None:
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   525
            files = metadata.decode_files_sidedata(sd)
c2435280ca63 copy-tracing: add a --compute flag to debugchangedfiles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46476
diff changeset
   526
    if files is not None:
45665
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   527
        for f in sorted(files.touched):
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   528
            if f in files.added:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   529
                action = b"added"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   530
            elif f in files.removed:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   531
                action = b"removed"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   532
            elif f in files.merged:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   533
                action = b"merged"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   534
            elif f in files.salvaged:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   535
                action = b"salvaged"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   536
            else:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   537
                action = b"touched"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   538
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   539
            copy_parent = b""
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   540
            copy_source = b""
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   541
            if f in files.copied_from_p1:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   542
                copy_parent = b"p1"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   543
                copy_source = files.copied_from_p1[f]
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   544
            elif f in files.copied_from_p2:
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   545
                copy_parent = b"p2"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   546
                copy_source = files.copied_from_p2[f]
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   547
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   548
            data = (action, copy_parent, f, copy_source)
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   549
            template = b"%-8s %2s: %s, %s;\n"
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   550
            ui.write(template % data)
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   551
308ca5528ee6 changing-files: add a debug command display changed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45446
diff changeset
   552
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   553
@command(b'debugcheckstate', [], b'')
30503
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   554
def debugcheckstate(ui, repo):
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   555
    """validate the correctness of the current dirstate"""
49826
c84844cd523a verify: also check dirstate
Raphaël Gomès <rgomes@octobus.net>
parents: 49824
diff changeset
   556
    errors = verify.verifier(repo)._verify_dirstate()
30503
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   557
    if errors:
49826
c84844cd523a verify: also check dirstate
Raphaël Gomès <rgomes@octobus.net>
parents: 49824
diff changeset
   558
        errstr = _(b"dirstate inconsistent with current parent's manifest")
43635
72b454fae92e debugcommands: don't shadow the error module
Augie Fackler <augie@google.com>
parents: 43633
diff changeset
   559
        raise error.Abort(errstr)
30504
c3bdc27121d1 debugcommands: move 'debugcommands' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30503
diff changeset
   560
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   561
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   562
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   563
    b'debugcolor',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   564
    [(b'', b'style', None, _(b'show all configured styles'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   565
    b'hg debugcolor',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   566
)
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   567
def debugcolor(ui, repo, **opts):
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   568
    """show available color, effects or style"""
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
   569
    ui.writenoi18n(b'color mode: %s\n' % stringutil.pprint(ui._colormode))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   570
    if opts.get('style'):
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   571
        return _debugdisplaystyle(ui)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   572
    else:
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   573
        return _debugdisplaycolor(ui)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   574
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   575
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   576
def _debugdisplaycolor(ui):
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   577
    ui = ui.copy()
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   578
    ui._styles.clear()
31689
57a22f699179 color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents: 31634
diff changeset
   579
    for effect in color._activeeffects(ui).keys():
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   580
        ui._styles[effect] = effect
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   581
    if ui._terminfoparams:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   582
        for k, v in ui.configitems(b'color'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   583
            if k.startswith(b'color.'):
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   584
                ui._styles[k] = k[6:]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   585
            elif k.startswith(b'terminfo.'):
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   586
                ui._styles[k] = k[9:]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   587
    ui.write(_(b'available colors:\n'))
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   588
    # sort label with a '_' after the other to group '_background' entry.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   589
    items = sorted(ui._styles.items(), key=lambda i: (b'_' in i[0], i[0], i[1]))
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   590
    for colorname, label in items:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   591
        ui.write(b'%s\n' % colorname, label=label)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   592
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   593
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   594
def _debugdisplaystyle(ui):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   595
    ui.write(_(b'available style:\n'))
37823
0e9ddab2bac2 debugcolor: fix crash by empty styles (issue5856)
Yuya Nishihara <yuya@tcha.org>
parents: 37722
diff changeset
   596
    if not ui._styles:
0e9ddab2bac2 debugcolor: fix crash by empty styles (issue5856)
Yuya Nishihara <yuya@tcha.org>
parents: 37722
diff changeset
   597
        return
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   598
    width = max(len(s) for s in ui._styles)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   599
    for label, effects in sorted(ui._styles.items()):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   600
        ui.write(b'%s' % label, label=label)
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   601
        if effects:
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   602
            # 50
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   603
            ui.write(b': ')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   604
            ui.write(b' ' * (max(0, width - len(label))))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   605
            ui.write(b', '.join(ui.label(e, e) for e in effects.split()))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   606
        ui.write(b'\n')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   607
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   608
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   609
@command(b'debugcreatestreamclonebundle', [], b'FILE')
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   610
def debugcreatestreamclonebundle(ui, repo, fname):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   611
    """create a stream clone bundle file
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   612
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   613
    Stream bundles are special bundles that are essentially archives of
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   614
    revlog files. They are commonly used for cloning very quickly.
50644
89556caf3c66 stream-clone: update debugcreatestreamclonebundle helps
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50619
diff changeset
   615
89556caf3c66 stream-clone: update debugcreatestreamclonebundle helps
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50619
diff changeset
   616
    This command creates a "version 1" stream clone, which is deprecated in
89556caf3c66 stream-clone: update debugcreatestreamclonebundle helps
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50619
diff changeset
   617
    favor of newer versions of the stream protocol. Bundles using such newer
89556caf3c66 stream-clone: update debugcreatestreamclonebundle helps
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50619
diff changeset
   618
     versions can be generated using the `hg bundle` command.
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   619
    """
32745
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   620
    # TODO we may want to turn this into an abort when this functionality
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   621
    # is moved into `hg bundle`.
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   622
    if phases.hassecret(repo):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   623
        ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   624
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   625
                b'(warning: stream clone bundle will contain secret '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   626
                b'revisions)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   627
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   628
        )
32745
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   629
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   630
    requirements, gen = streamclone.generatebundlev1(repo)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   631
    changegroup.writechunks(ui, gen, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   632
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   633
    ui.write(_(b'bundle requirements: %s\n') % b', '.join(sorted(requirements)))
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   634
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   635
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   636
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   637
    b'debugdag',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   638
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   639
        (b't', b'tags', None, _(b'use tags as labels')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   640
        (b'b', b'branches', None, _(b'annotate with branch names')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   641
        (b'', b'dots', None, _(b'use dots for runs')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   642
        (b's', b'spaces', None, _(b'separate elements by spaces')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   643
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   644
    _(b'[OPTION]... [FILE [REV]...]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   645
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   646
)
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   647
def debugdag(ui, repo, file_=None, *revs, **opts):
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   648
    """format the changelog or an index DAG as a concise textual description
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   649
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   650
    If you pass a revlog index, the revlog's DAG is emitted. If you list
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   651
    revision numbers, they get labeled in the output as rN.
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   652
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   653
    Otherwise, the changelog DAG of the current repo is emitted.
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   654
    """
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   655
    spaces = opts.get('spaces')
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   656
    dots = opts.get('dots')
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   657
    if file_:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   658
        rlog = revlog.revlog(vfsmod.vfs(encoding.getcwd(), audit=False), file_)
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44433
diff changeset
   659
        revs = {int(r) for r in revs}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   660
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   661
        def events():
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   662
            for r in rlog:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   663
                yield b'n', (r, list(p for p in rlog.parentrevs(r) if p != -1))
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   664
                if r in revs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   665
                    yield b'l', (r, b"r%i" % r)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   666
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   667
    elif repo:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   668
        cl = repo.changelog
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   669
        tags = opts.get('tags')
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
   670
        branches = opts.get('branches')
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   671
        if tags:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   672
            labels = {}
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   673
            for l, n in repo.tags().items():
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   674
                labels.setdefault(cl.rev(n), []).append(l)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   675
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   676
        def events():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   677
            b = b"default"
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   678
            for r in cl:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   679
                if branches:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   680
                    newb = cl.read(cl.node(r))[5][b'branch']
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   681
                    if newb != b:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   682
                        yield b'a', newb
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   683
                        b = newb
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   684
                yield b'n', (r, list(p for p in cl.parentrevs(r) if p != -1))
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   685
                if tags:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   686
                    ls = labels.get(r)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   687
                    if ls:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   688
                        for l in ls:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   689
                            yield b'l', (r, l)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   690
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   691
    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   692
        raise error.Abort(_(b'need repo for changelog dag'))
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   693
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   694
    for line in dagparser.dagtextlines(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   695
        events(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   696
        addspaces=spaces,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   697
        wraplabels=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   698
        wrapannotations=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   699
        wrapnonlinear=dots,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   700
        usedots=dots,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   701
        maxlinewidth=70,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   702
    ):
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   703
        ui.write(line)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   704
        ui.write(b"\n")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   705
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   706
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   707
@command(b'debugdata', cmdutil.debugrevlogopts, _(b'-c|-m|FILE REV'))
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   708
def debugdata(ui, repo, file_, rev=None, **opts):
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   709
    """dump the contents of a data file revision"""
50946
4135e7271b9e debugdata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50945
diff changeset
   710
    if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   711
        if rev is not None:
50547
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
   712
            raise error.InputError(
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
   713
                _(b'cannot specify a revision with other arguments')
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
   714
            )
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   715
        file_, rev = None, file_
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   716
    elif rev is None:
50547
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
   717
        raise error.InputError(_(b'please specify a revision'))
50946
4135e7271b9e debugdata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50945
diff changeset
   718
    r = cmdutil.openstorage(
4135e7271b9e debugdata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50945
diff changeset
   719
        repo, b'debugdata', file_, pycompat.byteskwargs(opts)
4135e7271b9e debugdata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50945
diff changeset
   720
    )
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   721
    try:
42773
127d57e950e0 rawdata: update callers in debugcommands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42651
diff changeset
   722
        ui.write(r.rawdata(r.lookup(rev)))
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   723
    except KeyError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   724
        raise error.Abort(_(b'invalid revision identifier %s') % rev)
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   725
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   726
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   727
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   728
    b'debugdate',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   729
    [(b'e', b'extended', None, _(b'try extended date formats'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   730
    _(b'[-e] DATE [RANGE]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   731
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   732
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   733
)
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   734
def debugdate(ui, date, range=None, **opts):
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   735
    """parse and display a date"""
43503
313e3a279828 cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents: 43238
diff changeset
   736
    if opts["extended"]:
43878
38d6aa768310 debugcommands: finish moving `extendeddateformats` from util to dateutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 43704
diff changeset
   737
        d = dateutil.parsedate(date, dateutil.extendeddateformats)
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   738
    else:
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36587
diff changeset
   739
        d = dateutil.parsedate(date)
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
   740
    ui.writenoi18n(b"internal: %d %d\n" % d)
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
   741
    ui.writenoi18n(b"standard: %s\n" % dateutil.datestr(d))
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   742
    if range:
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36587
diff changeset
   743
        m = dateutil.matchdate(range)
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
   744
        ui.writenoi18n(b"match: %s\n" % m(d[0]))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   745
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   746
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   747
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   748
    b'debugdeltachain',
51072
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   749
    [
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   750
        (
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   751
            b'r',
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   752
            b'rev',
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   753
            [],
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   754
            _('restrict processing to these revlog revisions'),
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   755
        ),
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   756
        (
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   757
            b'',
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   758
            b'all-info',
51076
786b6225793a debug-delta-chain: print less data by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51075
diff changeset
   759
            False,
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   760
            _('compute all information unless specified otherwise'),
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   761
        ),
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   762
        (
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   763
            b'',
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   764
            b'size-info',
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   765
            None,
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   766
            _('compute information related to deltas size'),
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   767
        ),
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   768
        (
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   769
            b'',
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   770
            b'dist-info',
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   771
            None,
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   772
            _('compute information related to base distance'),
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   773
        ),
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   774
        (
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   775
            b'',
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   776
            b'sparse-info',
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   777
            None,
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   778
            _('compute information related to sparse read'),
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   779
        ),
51072
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   780
    ]
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   781
    + cmdutil.debugrevlogopts
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   782
    + cmdutil.formatteropts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   783
    _(b'-c|-m|FILE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   784
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   785
)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   786
def debugdeltachain(ui, repo, file_=None, **opts):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   787
    """dump information about delta chains in a revlog
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   788
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   789
    Output can be templatized. Available template keywords are:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   790
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   791
    :``rev``:       revision number
49221
75d0775dce7f debugdeltachain: also display p1/p2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49219
diff changeset
   792
    :``p1``:        parent 1 revision number (for reference)
75d0775dce7f debugdeltachain: also display p1/p2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49219
diff changeset
   793
    :``p2``:        parent 2 revision number (for reference)
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   794
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   795
    :``chainid``:   delta chain identifier (numbered by unique base)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   796
    :``chainlen``:  delta chain length to this revision
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   797
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   798
    :``prevrev``:   previous revision in delta chain
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   799
    :``deltatype``: role of delta / how it was computed
49222
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   800
                    - base:  a full snapshot
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   801
                    - snap:  an intermediate snapshot
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   802
                    - p1:    a delta against the first parent
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   803
                    - p2:    a delta against the second parent
49223
13e523228623 debugdeltachain: detect a special case where parents are "skipped"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49222
diff changeset
   804
                    - skip1: a delta against the same base as p1
13e523228623 debugdeltachain: detect a special case where parents are "skipped"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49222
diff changeset
   805
                              (when p1 has empty delta
13e523228623 debugdeltachain: detect a special case where parents are "skipped"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49222
diff changeset
   806
                    - skip2: a delta against the same base as p2
13e523228623 debugdeltachain: detect a special case where parents are "skipped"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49222
diff changeset
   807
                              (when p2 has empty delta
49222
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   808
                    - prev:  a delta against the previous revision
e7d23c512d3d debugdeltachain: document the possible value for deltatype
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49221
diff changeset
   809
                    - other: a delta against an arbitrary revision
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   810
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   811
    :``compsize``:  compressed size of revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   812
    :``uncompsize``: uncompressed size of revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   813
    :``chainsize``: total size of compressed revisions in chain
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   814
    :``chainratio``: total chain size divided by uncompressed revision size
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   815
                    (new delta chains typically start at ratio 2.00)
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   816
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   817
    :``lindist``:   linear distance from base revision in delta chain to end
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   818
                    of this revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   819
    :``extradist``: total size of revisions not part of this delta chain from
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   820
                    base of delta chain to end of this revision; a measurement
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   821
                    of how much extra data we need to read/seek across to read
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   822
                    the delta chain for this revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   823
    :``extraratio``: extradist divided by chainsize; another representation of
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   824
                    how much unrelated data is needed to load this delta chain
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   825
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   826
    If the repository is configured to use the sparse read, additional keywords
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   827
    are available:
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   828
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   829
    :``readsize``:     total size of data read from the disk for a revision
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   830
                       (sum of the sizes of all the blocks)
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   831
    :``largestblock``: size of the largest block of data read from the disk
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   832
    :``readdensity``:  density of useful bytes in the data read from the disk
35678
43154a76f392 debugdeltachain: display how many chunks would be read in sparse-read mode
Paul Morelle <paul.morelle@octobus.net>
parents: 35585
diff changeset
   833
    :``srchunks``:  in how many data hunks the whole revision would be read
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   834
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   835
    It is possible to select the information to be computed, this can provide a
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   836
    noticeable speedup to the command in some cases.
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   837
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   838
    Always computed:
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   839
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   840
    - ``rev``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   841
    - ``p1``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   842
    - ``p2``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   843
    - ``chainid``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   844
    - ``chainlen``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   845
    - ``prevrev``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   846
    - ``deltatype``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   847
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   848
    Computed with --no-size-info
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   849
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   850
    - ``compsize``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   851
    - ``uncompsize``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   852
    - ``chainsize``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   853
    - ``chainratio``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   854
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   855
    Computed with --no-dist-info
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   856
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   857
    - ``lindist``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   858
    - ``extradist``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   859
    - ``extraratio``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   860
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   861
    Skipped with --no-sparse-info
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   862
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   863
    - ``readsize``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   864
    - ``largestblock``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   865
    - ``readdensity``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   866
    - ``srchunks``
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   867
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   868
    --
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   869
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   870
    The sparse read can be enabled with experimental.sparse-read = True
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   871
    """
51072
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   872
    revs = None
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   873
    revs_opt = opts.pop('rev', [])
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   874
    if revs_opt:
810446d2d5ef debug-delta-chaing: add a parameter to select revision to look at
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51070
diff changeset
   875
        revs = [int(r) for r in revs_opt]
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   876
51076
786b6225793a debug-delta-chain: print less data by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51075
diff changeset
   877
    all_info = opts.pop('all_info', False)
51075
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   878
    size_info = opts.pop('size_info', None)
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   879
    if size_info is None:
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   880
        size_info = all_info
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   881
    dist_info = opts.pop('dist_info', None)
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   882
    if dist_info is None:
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   883
        dist_info = all_info
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   884
    sparse_info = opts.pop('sparse_info', None)
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   885
    if sparse_info is None:
2d30d1ba0371 debugdeltachain: add a parameter to display all info
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51073
diff changeset
   886
        sparse_info = all_info
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   887
51070
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   888
    revlog = cmdutil.openrevlog(
50947
32fe4af9971d debugdeltachain: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50946
diff changeset
   889
        repo, b'debugdeltachain', file_, pycompat.byteskwargs(opts)
32fe4af9971d debugdeltachain: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50946
diff changeset
   890
    )
32fe4af9971d debugdeltachain: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50946
diff changeset
   891
    fm = ui.formatter(b'debugdeltachain', pycompat.byteskwargs(opts))
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   892
51073
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   893
    lines = revlog_debug.debug_delta_chain(
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   894
        revlog,
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   895
        revs=revs,
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   896
        size_info=size_info,
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   897
        dist_info=dist_info,
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   898
        sparse_info=sparse_info,
752e380c5702 debug-delta-chain: add options to control what we compute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51072
diff changeset
   899
    )
51070
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   900
    # first entry is the header
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   901
    header = next(lines)
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   902
    fm.plain(header)
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   903
    for entry in lines:
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   904
        label = b' '.join(e[0] for e in entry)
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   905
        format = b' '.join(e[1] for e in entry)
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   906
        values = [e[3] for e in entry]
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   907
        data = dict((e[2], e[3]) for e in entry)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   908
        fm.startitem()
51070
d7f975e49f20 delta-chain: move the debugdeltachain command in revlogutils
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51059
diff changeset
   909
        fm.write(label, format, *values, **data)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   910
        fm.plain(b'\n')
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   911
    fm.end()
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   912
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   913
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   914
@command(
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   915
    b'debug-delta-find',
49589
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   916
    cmdutil.debugrevlogopts
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   917
    + cmdutil.formatteropts
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   918
    + [
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   919
        (
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   920
            b'',
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   921
            b'source',
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   922
            b'full',
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   923
            _(b'input data feed to the process (full, storage, p1, p2, prev)'),
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   924
        ),
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   925
    ],
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   926
    _(b'-c|-m|FILE REV'),
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   927
    optionalrepo=True,
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   928
)
49589
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   929
def debugdeltafind(ui, repo, arg_1, arg_2=None, source=b'full', **opts):
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   930
    """display the computation to get to a valid delta for storing REV
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   931
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   932
    This command will replay the process used to find the "best" delta to store
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   933
    a revision and display information about all the steps used to get to that
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   934
    result.
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   935
49589
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   936
    By default, the process is fed with a the full-text for the revision. This
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   937
    can be controlled with the --source flag.
266bb5c86f4b debug-delta-find: add a --source option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49472
diff changeset
   938
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   939
    The revision use the revision number of the target storage (not changelog
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   940
    revision number).
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   941
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   942
    note: the process is initiated from a full text of the revision to store.
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   943
    """
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   944
    if arg_2 is None:
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   945
        file_ = None
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   946
        rev = arg_1
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   947
    else:
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   948
        file_ = arg_1
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   949
        rev = arg_2
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   950
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   951
    rev = int(rev)
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   952
50948
f7c35a645c2e debugdeltafind: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50947
diff changeset
   953
    revlog = cmdutil.openrevlog(
f7c35a645c2e debugdeltafind: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50947
diff changeset
   954
        repo, b'debugdeltachain', file_, pycompat.byteskwargs(opts)
f7c35a645c2e debugdeltafind: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50947
diff changeset
   955
    )
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   956
    p1r, p2r = revlog.parentrevs(rev)
49676
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   957
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   958
    if source == b'full':
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   959
        base_rev = nullrev
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   960
    elif source == b'storage':
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   961
        base_rev = revlog.deltaparent(rev)
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   962
    elif source == b'p1':
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   963
        base_rev = p1r
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   964
    elif source == b'p2':
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   965
        base_rev = p2r
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   966
    elif source == b'prev':
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   967
        base_rev = rev - 1
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   968
    else:
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   969
        raise error.InputError(b"invalid --source value: %s" % source)
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   970
4302db0f54c8 find-delta: move most of the debug-find-delta code in the debug module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49660
diff changeset
   971
    revlog_debug.debug_delta_find(ui, revlog, rev, base_rev=base_rev)
49228
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   972
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   973
b909dd35d9ab deltas: add a debug-delta-find command to analyse delta search
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49223
diff changeset
   974
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   975
    b'debugdirstate|debugstate',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   976
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   977
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   978
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   979
            b'nodates',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   980
            None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   981
            _(b'do not display the saved mtime (DEPRECATED)'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   982
        ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   983
        (b'', b'dates', True, _(b'display the saved mtime')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   984
        (b'', b'datesort', None, _(b'sort by saved mtime')),
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   985
        (
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   986
            b'',
49152
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   987
            b'docket',
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   988
            False,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   989
            _(b'display the docket (metadata file) instead'),
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   990
        ),
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   991
        (
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
   992
            b'',
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   993
            b'all',
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   994
            False,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   995
            _(b'display dirstate-v2 tree nodes that would not exist in v1'),
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   996
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   997
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   998
    _(b'[OPTION]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
   999
)
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1000
def debugstate(ui, repo, **opts):
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1001
    """show the contents of the current dirstate"""
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1002
49152
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1003
    if opts.get("docket"):
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1004
        if not repo.dirstate._use_dirstate_v2:
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1005
            raise error.Abort(_(b'dirstate v1 does not have a docket'))
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1006
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1007
        docket = repo.dirstate._map.docket
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1008
        (
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1009
            start_offset,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1010
            root_nodes,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1011
            nodes_with_entry,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1012
            nodes_with_copy,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1013
            unused_bytes,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1014
            _unused,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1015
            ignore_pattern,
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1016
        ) = dirstateutils.v2.TREE_METADATA.unpack(docket.tree_metadata)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1017
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1018
        ui.write(_(b"size of dirstate data: %d\n") % docket.data_size)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1019
        ui.write(_(b"data file uuid: %s\n") % docket.uuid)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1020
        ui.write(_(b"start offset of root nodes: %d\n") % start_offset)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1021
        ui.write(_(b"number of root nodes: %d\n") % root_nodes)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1022
        ui.write(_(b"nodes with entries: %d\n") % nodes_with_entry)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1023
        ui.write(_(b"nodes with copies: %d\n") % nodes_with_copy)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1024
        ui.write(_(b"number of unused bytes: %d\n") % unused_bytes)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1025
        ui.write(
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1026
            _(b"ignore pattern hash: %s\n") % binascii.hexlify(ignore_pattern)
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1027
        )
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1028
        return
eaaf4f98c9f1 dirstate-v2: add flag to `debugstate` to print docket information
Raphaël Gomès <rgomes@octobus.net>
parents: 49048
diff changeset
  1029
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1030
    nodates = not opts['dates']
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1031
    if opts.get('nodates') is not None:
39760
7e99b02768ef debugdirstate: deprecate --nodates in favor of --no-dates
Martin von Zweigbergk <martinvonz@google.com>
parents: 39561
diff changeset
  1032
        nodates = True
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1033
    datesort = opts.get('datesort')
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1034
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1035
    if datesort:
48024
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1036
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1037
        def keyfunc(entry):
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1038
            filename, _state, _mode, _size, mtime = entry
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1039
            return (mtime, filename)
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1040
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1041
    else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1042
        keyfunc = None  # sort by filename
48023
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47875
diff changeset
  1043
    entries = list(repo.dirstate._map.debug_iter(all=opts['all']))
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47298
diff changeset
  1044
    entries.sort(key=keyfunc)
48024
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1045
    for entry in entries:
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1046
        filename, state, mode, size, mtime = entry
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1047
        if mtime == -1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1048
            timestr = b'unset               '
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1049
        elif nodates:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1050
            timestr = b'set                 '
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1051
        else:
48024
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1052
            timestr = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(mtime))
35204
d4b108fdf423 py3: use encoding.strtolocal() to convert string to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35151
diff changeset
  1053
            timestr = encoding.strtolocal(timestr)
48024
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1054
        if mode & 0o20000:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1055
            mode = b'lnk'
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1056
        else:
48024
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1057
            mode = b'%3o' % (mode & 0o777 & ~util.umask)
cedfe2606adf debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
  1058
        ui.write(b"%c %s %10d %s%s\n" % (state, mode, size, timestr, filename))
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1059
    for f in repo.dirstate.copies():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1060
        ui.write(_(b"copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
  1061
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1062
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1063
@command(
49183
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1064
    b'debugdirstateignorepatternshash',
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1065
    [],
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1066
    _(b''),
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1067
)
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1068
def debugdirstateignorepatternshash(ui, repo, **opts):
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1069
    """show the hash of ignore patterns stored in dirstate if v2,
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1070
    or nothing for dirstate-v2
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1071
    """
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1072
    if repo.dirstate._use_dirstate_v2:
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1073
        docket = repo.dirstate._map.docket
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1074
        hash_len = 20  # 160 bits for SHA-1
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1075
        hash_bytes = docket.tree_metadata[-hash_len:]
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1076
        ui.write(binascii.hexlify(hash_bytes) + b'\n')
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1077
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1078
22279b604a88 fix-ci: backed out changeset 308e45f7b455
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
  1079
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1080
    b'debugdiscovery',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1081
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1082
        (b'', b'old', None, _(b'use old-style discovery')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1083
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1084
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1085
            b'nonheads',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1086
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1087
            _(b'use old-style discovery with non-heads included'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1088
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1089
        (b'', b'rev', [], b'restrict discovery to this set of revs'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1090
        (b'', b'seed', b'12323', b'specify the random seed use for discovery'),
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1091
        (
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1092
            b'',
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1093
            b'local-as-revs',
46770
b6ac612445e0 debugdiscovery: add missing byte string marker to some help text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46769
diff changeset
  1094
            b"",
b6ac612445e0 debugdiscovery: add missing byte string marker to some help text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46769
diff changeset
  1095
            b'treat local has having these revisions only',
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1096
        ),
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1097
        (
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1098
            b'',
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1099
            b'remote-as-revs',
46770
b6ac612445e0 debugdiscovery: add missing byte string marker to some help text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46769
diff changeset
  1100
            b"",
48955
db960032d522 debugdiscovery: fix a typo in the help
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48921
diff changeset
  1101
            b'use local as remote, with only these revisions',
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1102
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1103
    ]
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1104
    + cmdutil.remoteopts
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1105
    + cmdutil.formatteropts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1106
    _(b'[--rev REV] [OTHER]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1107
)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1108
def debugdiscovery(ui, repo, remoteurl=b"default", **opts):
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1109
    """runs the changeset discovery protocol in isolation
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1110
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1111
    The local peer can be "replaced" by a subset of the local repository by
49406
f69bffd00abe debug-discovery: apply spelling fixes from Raphaël
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49404
diff changeset
  1112
    using the `--local-as-revs` flag. In the same way, the usual `remote` peer
f69bffd00abe debug-discovery: apply spelling fixes from Raphaël
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49404
diff changeset
  1113
    can be "replaced" by a subset of the local repository using the
49399
a3fdc4fcb7d2 debug-discovery: fix a typo in the doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49306
diff changeset
  1114
    `--remote-as-revs` flag. This is useful to efficiently debug pathological
49406
f69bffd00abe debug-discovery: apply spelling fixes from Raphaël
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49404
diff changeset
  1115
    discovery situations.
46803
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1116
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1117
    The following developer oriented config are relevant for people playing with this command:
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1118
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1119
    * devel.discovery.exchange-heads=True
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1120
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1121
      If False, the discovery will not start with
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1122
      remote head fetching and local head querying.
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1123
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1124
    * devel.discovery.grow-sample=True
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1125
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1126
      If False, the sample size used in set discovery will not be increased
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1127
      through the process
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1128
46805
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1129
    * devel.discovery.grow-sample.dynamic=True
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1130
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1131
      When discovery.grow-sample.dynamic is True, the default, the sample size is
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1132
      adapted to the shape of the undecided set (it is set to the max of:
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1133
      <target-size>, len(roots(undecided)), len(heads(undecided)
2b1b8f3e6510 setdiscovery: add a discovery.grow-sample.dynamic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46803
diff changeset
  1134
46803
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1135
    * devel.discovery.grow-sample.rate=1.05
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1136
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1137
      the rate at which the sample grow
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1138
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1139
    * devel.discovery.randomize=True
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1140
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1141
      If andom sampling during discovery are deterministic. It is meant for
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1142
      integration tests.
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1143
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1144
    * devel.discovery.sample-size=200
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1145
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1146
      Control the initial size of the discovery sample
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1147
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1148
    * devel.discovery.sample-size.initial=100
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1149
13d973690ecd debugdiscovery: document relevant config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46794
diff changeset
  1150
      Control the initial size of the discovery for initial change
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1151
    """
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1152
    unfi = repo.unfiltered()
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1153
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1154
    # setup potential extra filtering
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1155
    local_revs = opts["local_as_revs"]
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1156
    remote_revs = opts["remote_as_revs"]
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1157
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1158
    # make sure tests are repeatable
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1159
    random.seed(int(opts['seed']))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1160
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1161
    if not remote_revs:
49726
4303fa8f4232 path: pass `path` to `peer` in `hg debugdiscovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49676
diff changeset
  1162
        path = urlutil.get_unique_pull_path_obj(
4303fa8f4232 path: pass `path` to `peer` in `hg debugdiscovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49676
diff changeset
  1163
            b'debugdiscovery', ui, remoteurl
46959
9e021cffb356 debugdiscovery: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46908
diff changeset
  1164
        )
49726
4303fa8f4232 path: pass `path` to `peer` in `hg debugdiscovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49676
diff changeset
  1165
        branches = (path.branch, [])
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1166
        remote = hg.peer(repo, pycompat.byteskwargs(opts), path)
49726
4303fa8f4232 path: pass `path` to `peer` in `hg debugdiscovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49676
diff changeset
  1167
        ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(path.loc))
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1168
    else:
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1169
        branches = (None, [])
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48101
diff changeset
  1170
        remote_filtered_revs = logcmdutil.revrange(
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1171
            unfi, [b"not (::(%s))" % remote_revs]
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1172
        )
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1173
        remote_filtered_revs = frozenset(remote_filtered_revs)
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1174
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1175
        def remote_func(x):
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1176
            return remote_filtered_revs
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1177
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1178
        repoview.filtertable[b'debug-discovery-remote-filter'] = remote_func
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1179
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1180
        remote = repo.peer()
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1181
        remote._repo = remote._repo.filtered(b'debug-discovery-remote-filter')
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1182
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1183
    if local_revs:
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48101
diff changeset
  1184
        local_filtered_revs = logcmdutil.revrange(
46476
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1185
            unfi, [b"not (::(%s))" % local_revs]
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1186
        )
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1187
        local_filtered_revs = frozenset(local_filtered_revs)
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1188
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1189
        def local_func(x):
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1190
            return local_filtered_revs
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1191
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1192
        repoview.filtertable[b'debug-discovery-local-filter'] = local_func
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1193
        repo = repo.filtered(b'debug-discovery-local-filter')
4f5e9a77ff7a debugdiscovery: add flags to run discovery on subsets of the local repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46466
diff changeset
  1194
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46076
diff changeset
  1195
    data = {}
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1196
    if opts.get('old'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1197
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1198
        def doit(pushedrevs, remoteheads, remote=remote):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1199
            if not hasattr(remote, 'branches'):
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1200
                # enable in-client legacy support
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1201
                remote = localrepo.locallegacypeer(remote.local())
49400
a1bb21542ab0 debug-discovery: properly apply remote filtering in "old" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49399
diff changeset
  1202
                if remote_revs:
a1bb21542ab0 debug-discovery: properly apply remote filtering in "old" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49399
diff changeset
  1203
                    r = remote._repo.filtered(b'debug-discovery-remote-filter')
a1bb21542ab0 debug-discovery: properly apply remote filtering in "old" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49399
diff changeset
  1204
                    remote._repo = r
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1205
            common, _in, hds = treediscovery.findcommonincoming(
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46076
diff changeset
  1206
                repo, remote, force=True, audit=data
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1207
            )
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1208
            common = set(common)
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1209
            if not opts.get('nonheads'):
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1210
                ui.writenoi18n(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1211
                    b"unpruned common: %s\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1212
                    % b" ".join(sorted(short(n) for n in common))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1213
                )
39163
26f3d075f36e debugcommands: use a revset instead of dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39161
diff changeset
  1214
26f3d075f36e debugcommands: use a revset instead of dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39161
diff changeset
  1215
                clnode = repo.changelog.node
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1216
                common = repo.revs(b'heads(::%ln)', common)
39163
26f3d075f36e debugcommands: use a revset instead of dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39161
diff changeset
  1217
                common = {clnode(r) for r in common}
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1218
            return common, hds
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1219
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1220
    else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1221
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1222
        def doit(pushedrevs, remoteheads, remote=remote):
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
  1223
            nodes = None
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
  1224
            if pushedrevs:
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48101
diff changeset
  1225
                revs = logcmdutil.revrange(repo, pushedrevs)
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
  1226
                nodes = [repo[r].node() for r in revs]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1227
            common, any, hds = setdiscovery.findcommonheads(
49403
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1228
                ui,
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1229
                repo,
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1230
                remote,
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1231
                ancestorsof=nodes,
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1232
                audit=data,
ac4fda5d3ccd debug-discovery: do not abort on unrelated repositories
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49402
diff changeset
  1233
                abortwhenunrelated=False,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1234
            )
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1235
            return common, hds
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
  1236
35419
fed2c040764e debugdiscovery: drop reference to non-existent --remote-head option
Martin von Zweigbergk <martinvonz@google.com>
parents: 35418
diff changeset
  1237
    remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, revs=None)
50949
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1238
    localrevs = opts['rev']
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1239
8e5083590cfe debugdiscovery: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50948
diff changeset
  1240
    fm = ui.formatter(b'debugdiscovery', pycompat.byteskwargs(opts))
46769
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1241
    if fm.strict_format:
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1242
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1243
        @contextlib.contextmanager
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1244
        def may_capture_output():
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1245
            ui.pushbuffer()
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1246
            yield
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1247
            data[b'output'] = ui.popbuffer()
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1248
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1249
    else:
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1250
        may_capture_output = util.nullcontextmanager
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1251
    with may_capture_output():
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1252
        with util.timedcm('debug-discovery') as t:
67a2ecea8bd9 debugdiscovery: also integrate the discovery output in the json one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46768
diff changeset
  1253
            common, hds = doit(localrevs, remoterevs)
42031
d31d8c5279c6 debugdiscovery: small internal refactoring
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42030
diff changeset
  1254
42032
63165e4a76da debugdiscovery: display more statistic about the common set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42031
diff changeset
  1255
    # compute all statistics
49404
c6aac50038bb debug-discovery: deal with case where common is empty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49403
diff changeset
  1256
    if len(common) == 1 and repo.nullid in common:
c6aac50038bb debug-discovery: deal with case where common is empty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49403
diff changeset
  1257
        common = set()
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1258
    heads_common = set(common)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1259
    heads_remote = set(hds)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1260
    heads_local = set(repo.heads())
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1261
    # note: they cannot be a local or remote head that is in common and not
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1262
    # itself a head of common.
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1263
    heads_common_local = heads_common & heads_local
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1264
    heads_common_remote = heads_common & heads_remote
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1265
    heads_common_both = heads_common & heads_remote & heads_local
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1266
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1267
    all = repo.revs(b'all()')
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1268
    common = repo.revs(b'::%ln', common)
46075
3ca9d26c5984 debugdiscovery: add some data about the shapes of the sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46061
diff changeset
  1269
    roots_common = repo.revs(b'roots(::%ld)', common)
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1270
    missing = repo.revs(b'not ::%ld', common)
46075
3ca9d26c5984 debugdiscovery: add some data about the shapes of the sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46061
diff changeset
  1271
    heads_missing = repo.revs(b'heads(%ld)', missing)
3ca9d26c5984 debugdiscovery: add some data about the shapes of the sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46061
diff changeset
  1272
    roots_missing = repo.revs(b'roots(%ld)', missing)
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1273
    assert len(common) + len(missing) == len(all)
42032
63165e4a76da debugdiscovery: display more statistic about the common set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42031
diff changeset
  1274
46076
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1275
    initial_undecided = repo.revs(
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1276
        b'not (::%ln or %ln::)', heads_common_remote, heads_common_local
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1277
    )
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1278
    heads_initial_undecided = repo.revs(b'heads(%ld)', initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1279
    roots_initial_undecided = repo.revs(b'roots(%ld)', initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1280
    common_initial_undecided = initial_undecided & common
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1281
    missing_initial_undecided = initial_undecided & missing
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1282
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1283
    data[b'elapsed'] = t.elapsed
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1284
    data[b'nb-common-heads'] = len(heads_common)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1285
    data[b'nb-common-heads-local'] = len(heads_common_local)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1286
    data[b'nb-common-heads-remote'] = len(heads_common_remote)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1287
    data[b'nb-common-heads-both'] = len(heads_common_both)
46075
3ca9d26c5984 debugdiscovery: add some data about the shapes of the sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46061
diff changeset
  1288
    data[b'nb-common-roots'] = len(roots_common)
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1289
    data[b'nb-head-local'] = len(heads_local)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1290
    data[b'nb-head-local-missing'] = len(heads_local) - len(heads_common_local)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1291
    data[b'nb-head-remote'] = len(heads_remote)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1292
    data[b'nb-head-remote-unknown'] = len(heads_remote) - len(
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1293
        heads_common_remote
46060
24751551fe64 debugdiscovery: clarify internal key name in debugobsolete
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46030
diff changeset
  1294
    )
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1295
    data[b'nb-revs'] = len(all)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1296
    data[b'nb-revs-common'] = len(common)
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1297
    data[b'nb-revs-missing'] = len(missing)
46111
9e24b3d8e896 debugdiscovery: fix swapped heads and roots
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46110
diff changeset
  1298
    data[b'nb-missing-heads'] = len(heads_missing)
9e24b3d8e896 debugdiscovery: fix swapped heads and roots
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46110
diff changeset
  1299
    data[b'nb-missing-roots'] = len(roots_missing)
46076
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1300
    data[b'nb-ini_und'] = len(initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1301
    data[b'nb-ini_und-heads'] = len(heads_initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1302
    data[b'nb-ini_und-roots'] = len(roots_initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1303
    data[b'nb-ini_und-common'] = len(common_initial_undecided)
0e5065b6baa0 debugdiscovery: display some information about the initial "undecided" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46075
diff changeset
  1304
    data[b'nb-ini_und-missing'] = len(missing_initial_undecided)
42032
63165e4a76da debugdiscovery: display more statistic about the common set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42031
diff changeset
  1305
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1306
    fm.startitem()
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1307
    fm.data(**pycompat.strkwargs(data))
42032
63165e4a76da debugdiscovery: display more statistic about the common set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42031
diff changeset
  1308
    # display discovery summary
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1309
    fm.plain(b"elapsed time:  %(elapsed)f seconds\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1310
    fm.plain(b"round-trips:           %(total-roundtrips)9d\n" % data)
49402
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1311
    if b'total-round-trips-heads' in data:
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1312
        fm.plain(
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1313
            b"  round-trips-heads:    %(total-round-trips-heads)9d\n" % data
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1314
        )
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1315
    if b'total-round-trips-branches' in data:
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1316
        fm.plain(
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1317
            b"  round-trips-branches:    %(total-round-trips-branches)9d\n"
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1318
            % data
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1319
        )
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1320
    if b'total-round-trips-between' in data:
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1321
        fm.plain(
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1322
            b"  round-trips-between:    %(total-round-trips-between)9d\n" % data
236702592ff0 debug-discovery: gather the right number of roundtrips for tree discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49401
diff changeset
  1323
        )
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48955
diff changeset
  1324
    fm.plain(b"queries:               %(total-queries)9d\n" % data)
49401
362c0026a977 debug-discovery: also gather details on tree-discovery queries type
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49400
diff changeset
  1325
    if b'total-queries-branches' in data:
362c0026a977 debug-discovery: also gather details on tree-discovery queries type
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49400
diff changeset
  1326
        fm.plain(b"  queries-branches:    %(total-queries-branches)9d\n" % data)
362c0026a977 debug-discovery: also gather details on tree-discovery queries type
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49400
diff changeset
  1327
    if b'total-queries-between' in data:
362c0026a977 debug-discovery: also gather details on tree-discovery queries type
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49400
diff changeset
  1328
        fm.plain(b"  queries-between:     %(total-queries-between)9d\n" % data)
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1329
    fm.plain(b"heads summary:\n")
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1330
    fm.plain(b"  total common heads:  %(nb-common-heads)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1331
    fm.plain(b"    also local heads:  %(nb-common-heads-local)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1332
    fm.plain(b"    also remote heads: %(nb-common-heads-remote)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1333
    fm.plain(b"    both:              %(nb-common-heads-both)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1334
    fm.plain(b"  local heads:         %(nb-head-local)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1335
    fm.plain(b"    common:            %(nb-common-heads-local)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1336
    fm.plain(b"    missing:           %(nb-head-local-missing)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1337
    fm.plain(b"  remote heads:        %(nb-head-remote)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1338
    fm.plain(b"    common:            %(nb-common-heads-remote)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1339
    fm.plain(b"    unknown:           %(nb-head-remote-unknown)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1340
    fm.plain(b"local changesets:      %(nb-revs)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1341
    fm.plain(b"  common:              %(nb-revs-common)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1342
    fm.plain(b"    heads:             %(nb-common-heads)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1343
    fm.plain(b"    roots:             %(nb-common-roots)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1344
    fm.plain(b"  missing:             %(nb-revs-missing)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1345
    fm.plain(b"    heads:             %(nb-missing-heads)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1346
    fm.plain(b"    roots:             %(nb-missing-roots)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1347
    fm.plain(b"  first undecided set: %(nb-ini_und)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1348
    fm.plain(b"    heads:             %(nb-ini_und-heads)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1349
    fm.plain(b"    roots:             %(nb-ini_und-roots)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1350
    fm.plain(b"    common:            %(nb-ini_und-common)9d\n" % data)
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1351
    fm.plain(b"    missing:           %(nb-ini_und-missing)9d\n" % data)
42032
63165e4a76da debugdiscovery: display more statistic about the common set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42031
diff changeset
  1352
42034
fd8d13ea1bcc debugdiscovery: only list common heads on verbose
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42033
diff changeset
  1353
    if ui.verbose:
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1354
        fm.plain(
46061
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1355
            b"common heads: %s\n"
44a52048c6d6 debugdiscovery: move various computation earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46060
diff changeset
  1356
            % b" ".join(sorted(short(n) for n in heads_common))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1357
        )
46768
3a8cf5b9c820 debugdiscovery: add support for Json output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46711
diff changeset
  1358
    fm.end()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1359
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1360
35562
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1361
_chunksize = 4 << 10
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1362
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1363
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1364
@command(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1365
    b'debugdownload',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1366
    [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1367
        (b'o', b'output', b'', _(b'path')),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1368
    ],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1369
    optionalrepo=True,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1370
)
35730
05d415790761 debugdownload: read repository hgrc if there is one
Boris Feld <boris.feld@octobus.net>
parents: 35728
diff changeset
  1371
def debugdownload(ui, repo, url, output=None, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1372
    """download a resource using Mercurial logic and config"""
35562
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1373
    fh = urlmod.open(ui, url, output)
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1374
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1375
    dest = ui
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1376
    if output:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1377
        dest = open(output, b"wb", _chunksize)
35562
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1378
    try:
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1379
        data = fh.read(_chunksize)
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1380
        while data:
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1381
            dest.write(data)
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1382
            data = fh.read(_chunksize)
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1383
    finally:
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1384
        if output:
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1385
            dest.close()
6580cf751418 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net>
parents: 35514
diff changeset
  1386
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1387
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1388
@command(b'debugextensions', cmdutil.formatteropts, [], optionalrepo=True)
37977
8ba0344f9fb1 debugextensions: process extensions loaded from the local repository too
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
  1389
def debugextensions(ui, repo, **opts):
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1390
    '''show information about active extensions'''
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1391
    exts = extensions.extensions(ui)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1392
    hgver = util.version()
50950
5dc20e1f0518 debugextensions: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50949
diff changeset
  1393
    fm = ui.formatter(b'debugextensions', pycompat.byteskwargs(opts))
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1394
    for extname, extmod in sorted(exts, key=operator.itemgetter(0)):
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1395
        isinternal = extensions.ismoduleinternal(extmod)
43687
f1dabf99db17 debugextensions: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43686
diff changeset
  1396
        extsource = None
f1dabf99db17 debugextensions: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43686
diff changeset
  1397
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1398
        if hasattr(extmod, '__file__'):
43687
f1dabf99db17 debugextensions: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43686
diff changeset
  1399
            extsource = pycompat.fsencode(extmod.__file__)
f1dabf99db17 debugextensions: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43686
diff changeset
  1400
        elif getattr(sys, 'oxidized', False):
f1dabf99db17 debugextensions: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43686
diff changeset
  1401
            extsource = pycompat.sysexecutable
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1402
        if isinternal:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1403
            exttestedwith = []  # never expose magic string to users
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1404
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1405
            exttestedwith = getattr(extmod, 'testedwith', b'').split()
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1406
        extbuglink = getattr(extmod, 'buglink', None)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1407
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1408
        fm.startitem()
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1409
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1410
        if ui.quiet or ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1411
            fm.write(b'name', b'%s\n', extname)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1412
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1413
            fm.write(b'name', b'%s', extname)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1414
            if isinternal or hgver in exttestedwith:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1415
                fm.plain(b'\n')
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1416
            elif not exttestedwith:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1417
                fm.plain(_(b' (untested!)\n'))
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1418
            else:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1419
                lasttestedversion = exttestedwith[-1]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1420
                fm.plain(b' (%s!)\n' % lasttestedversion)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1421
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1422
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1423
            ui.verbose and extsource,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1424
            b'source',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1425
            _(b'  location: %s\n'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1426
            extsource or b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1427
        )
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1428
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1429
        if ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1430
            fm.plain(_(b'  bundled: %s\n') % [b'no', b'yes'][isinternal])
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1431
        fm.data(bundled=isinternal)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1432
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1433
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1434
            ui.verbose and exttestedwith,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1435
            b'testedwith',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1436
            _(b'  tested with: %s\n'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1437
            fm.formatlist(exttestedwith, name=b'ver'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1438
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1439
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1440
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1441
            ui.verbose and extbuglink,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1442
            b'buglink',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1443
            _(b'  bug reporting: %s\n'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1444
            extbuglink or b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1445
        )
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1446
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
  1447
    fm.end()
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
  1448
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1449
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1450
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1451
    b'debugfileset',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1452
    [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1453
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1454
            b'r',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1455
            b'rev',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1456
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1457
            _(b'apply the filespec on this revision'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1458
            _(b'REV'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1459
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1460
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1461
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1462
            b'all-files',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1463
            False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1464
            _(b'test files from all revisions and working directory'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1465
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1466
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1467
            b's',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1468
            b'show-matcher',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1469
            None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1470
            _(b'print internal representation of matcher'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1471
        ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1472
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1473
            b'p',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1474
            b'show-stage',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1475
            [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1476
            _(b'print parsed tree at the given stage'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1477
            _(b'NAME'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1478
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1479
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1480
    _(b'[-r REV] [--all-files] [OPTION]... FILESPEC'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1481
)
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
  1482
def debugfileset(ui, repo, expr, **opts):
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
  1483
    '''parse and apply a fileset specification'''
38972
4d992e3f10ba debugcommands: force import of fileset in debugfileset
Augie Fackler <augie@google.com>
parents: 38829
diff changeset
  1484
    from . import fileset
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1485
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1486
    fileset.symbols  # force import of fileset so we have predicates to optimize
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1487
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1488
    ctx = logcmdutil.revsingle(repo, opts.get('rev'), None)
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1489
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1490
    stages = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1491
        (b'parsed', pycompat.identity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1492
        (b'analyzed', filesetlang.analyze),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1493
        (b'optimized', filesetlang.optimize),
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1494
    ]
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44433
diff changeset
  1495
    stagenames = {n for n, f in stages}
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1496
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1497
    showalways = set()
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1498
    if ui.verbose and not opts['show_stage']:
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1499
        # show parsed tree by --verbose (deprecated)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1500
        showalways.add(b'parsed')
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1501
    if opts['show_stage'] == [b'all']:
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1502
        showalways.update(stagenames)
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1503
    else:
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1504
        for n in opts['show_stage']:
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1505
            if n not in stagenames:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1506
                raise error.Abort(_(b'invalid stage name: %s') % n)
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1507
        showalways.update(opts['show_stage'])
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1508
38805
b9162ea1b815 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38802
diff changeset
  1509
    tree = filesetlang.parse(expr)
38801
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1510
    for n, f in stages:
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1511
        tree = f(tree)
1d1c1645d7b9 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org>
parents: 38783
diff changeset
  1512
        if n in showalways:
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1513
            if opts['show_stage'] or n != b'parsed':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1514
                ui.write(b"* %s:\n" % n)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1515
            ui.write(filesetlang.prettyformat(tree), b"\n")
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
  1516
38610
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1517
    files = set()
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1518
    if opts['all_files']:
38610
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1519
        for r in repo:
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1520
            c = repo[r]
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1521
            files.update(c.files())
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1522
            files.update(c.substate)
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1523
    if opts['all_files'] or ctx.rev() is None:
38610
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1524
        wctx = repo[None]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1525
        files.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1526
            repo.dirstate.walk(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1527
                scmutil.matchall(repo),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1528
                subrepos=list(wctx.substate),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1529
                unknown=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1530
                ignored=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1531
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1532
        )
38610
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1533
        files.update(wctx.substate)
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1534
    else:
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1535
        files.update(ctx.files())
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1536
        files.update(ctx.substate)
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1537
44009
e685fac56693 match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents: 43972
diff changeset
  1538
    m = ctx.matchfileset(repo.getcwd(), expr)
50951
44c29568898f debugfileset: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50950
diff changeset
  1539
    if opts['show_matcher'] or (opts['show_matcher'] is None and ui.verbose):
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1540
        ui.writenoi18n(b'* matcher:\n', stringutil.prettyrepr(m), b'\n')
38610
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1541
    for f in sorted(files):
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1542
        if not m(f):
3d8ef60569d8 fileset: make debugfileset filter repository files
Yuya Nishihara <yuya@tcha.org>
parents: 38599
diff changeset
  1543
            continue
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1544
        ui.write(b"%s\n" % f)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1545
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1546
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1547
@command(
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1548
    b"debug-repair-issue6528",
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1549
    [
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1550
        (
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1551
            b'',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1552
            b'to-report',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1553
            b'',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1554
            _(b'build a report of affected revisions to this file'),
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1555
            _(b'FILE'),
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1556
        ),
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1557
        (
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1558
            b'',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1559
            b'from-report',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1560
            b'',
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1561
            _(b'repair revisions listed in this report file'),
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1562
            _(b'FILE'),
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1563
        ),
47817
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1564
        (
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1565
            b'',
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1566
            b'paranoid',
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1567
            False,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1568
            _(b'check that both detection methods do the same thing'),
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1569
        ),
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1570
    ]
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1571
    + cmdutil.dryrunopts,
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1572
)
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1573
def debug_repair_issue6528(ui, repo, **opts):
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1574
    """find affected revisions and repair them. See issue6528 for more details.
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1575
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1576
    The `--to-report` and `--from-report` flags allow you to cache and reuse the
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1577
    computation of affected revisions for a given repository across clones.
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1578
    The report format is line-based (with empty lines ignored):
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1579
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1580
    ```
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1581
    <ascii-hex of the affected revision>,... <unencoded filelog index filename>
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1582
    ```
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1583
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1584
    There can be multiple broken revisions per filelog, they are separated by
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1585
    a comma with no spaces. The only space is between the revision(s) and the
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1586
    filename.
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1587
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1588
    Note that this does *not* mean that this repairs future affected revisions,
48187
b669e40fbbd6 help: update help text for debug-repair-issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 48118
diff changeset
  1589
    that needs a separate fix at the exchange level that was introduced in
b669e40fbbd6 help: update help text for debug-repair-issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 48118
diff changeset
  1590
    Mercurial 5.9.1.
47817
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1591
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1592
    There is a `--paranoid` flag to test that the fast implementation is correct
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1593
    by checking it against the slow implementation. Since this matter is quite
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1594
    urgent and testing every edge-case is probably quite costly, we use this
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1595
    method to test on large repositories as a fuzzing method of sorts.
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1596
    """
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1597
    cmdutil.check_incompatible_arguments(
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1598
        opts, 'to_report', ['from_report', 'dry_run']
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1599
    )
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1600
    dry_run = opts.get('dry_run')
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1601
    to_report = opts.get('to_report')
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1602
    from_report = opts.get('from_report')
47817
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1603
    paranoid = opts.get('paranoid')
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1604
    # TODO maybe add filelog pattern and revision pattern parameters to help
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1605
    # narrow down the search for users that know what they're looking for?
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1606
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1607
    if requirements.REVLOGV1_REQUIREMENT not in repo.requirements:
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1608
        msg = b"can only repair revlogv1 repositories, v2 is not affected"
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1609
        raise error.Abort(_(msg))
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1610
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1611
    rewrite.repair_issue6528(
47817
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1612
        ui,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1613
        repo,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1614
        dry_run=dry_run,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1615
        to_report=to_report,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1616
        from_report=from_report,
855463b5fe49 debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`
Raphaël Gomès <rgomes@octobus.net>
parents: 47815
diff changeset
  1617
        paranoid=paranoid,
47815
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1618
    )
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1619
b30a53ffbf9b debugcommands: introduce a debug command to repair repos affected by issue6528
Raphaël Gomès <rgomes@octobus.net>
parents: 47683
diff changeset
  1620
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1621
@command(b'debugformat', [] + cmdutil.formatteropts)
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1622
def debugformat(ui, repo, **opts):
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1623
    """display format information about the current repository
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1624
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1625
    Use --verbose to get extra information about current config value and
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1626
    Mercurial default."""
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1627
    maxvariantlength = max(len(fv.name) for fv in upgrade.allformatvariant)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1628
    maxvariantlength = max(len(b'format-variant'), maxvariantlength)
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1629
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1630
    def makeformatname(name):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1631
        return b'%s:' + (b' ' * (maxvariantlength - len(name)))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1632
50952
45381a1dd367 debugformat: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50951
diff changeset
  1633
    fm = ui.formatter(b'debugformat', pycompat.byteskwargs(opts))
35378
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1634
    if fm.isplain():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1635
35378
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1636
        def formatvalue(value):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1637
            if hasattr(value, 'startswith'):
35378
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1638
                return value
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1639
            if value:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1640
                return b'yes'
35378
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1641
            else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1642
                return b'no'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1643
35378
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1644
    else:
9144e898cad5 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org>
parents: 35377
diff changeset
  1645
        formatvalue = pycompat.identity
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1646
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1647
    fm.plain(b'format-variant')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1648
    fm.plain(b' ' * (maxvariantlength - len(b'format-variant')))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1649
    fm.plain(b' repo')
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1650
    if ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1651
        fm.plain(b' config default')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1652
    fm.plain(b'\n')
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1653
    for fv in upgrade.allformatvariant:
35377
c0b6fa74e007 debugformat: flush formatter output per item
Yuya Nishihara <yuya@tcha.org>
parents: 35339
diff changeset
  1654
        fm.startitem()
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1655
        repovalue = fv.fromrepo(repo)
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
  1656
        configvalue = fv.fromconfig(repo)
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1657
35338
bd326f3e0e14 debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents: 35337
diff changeset
  1658
        if repovalue != configvalue:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1659
            namelabel = b'formatvariant.name.mismatchconfig'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1660
            repolabel = b'formatvariant.repo.mismatchconfig'
35338
bd326f3e0e14 debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents: 35337
diff changeset
  1661
        elif repovalue != fv.default:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1662
            namelabel = b'formatvariant.name.mismatchdefault'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1663
            repolabel = b'formatvariant.repo.mismatchdefault'
35338
bd326f3e0e14 debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents: 35337
diff changeset
  1664
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1665
            namelabel = b'formatvariant.name.uptodate'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1666
            repolabel = b'formatvariant.repo.uptodate'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1667
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1668
        fm.write(b'name', makeformatname(fv.name), fv.name, label=namelabel)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1669
        fm.write(b'repo', b' %3s', formatvalue(repovalue), label=repolabel)
35338
bd326f3e0e14 debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents: 35337
diff changeset
  1670
        if fv.default != configvalue:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1671
            configlabel = b'formatvariant.config.special'
35338
bd326f3e0e14 debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents: 35337
diff changeset
  1672
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1673
            configlabel = b'formatvariant.config.default'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1674
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1675
            ui.verbose,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1676
            b'config',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1677
            b' %6s',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1678
            formatvalue(configvalue),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1679
            label=configlabel,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1680
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1681
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1682
            ui.verbose,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1683
            b'default',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1684
            b' %7s',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1685
            formatvalue(fv.default),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1686
            label=b'formatvariant.default',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1687
        )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1688
        fm.plain(b'\n')
35377
c0b6fa74e007 debugformat: flush formatter output per item
Yuya Nishihara <yuya@tcha.org>
parents: 35339
diff changeset
  1689
    fm.end()
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
  1690
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1691
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1692
@command(b'debugfsinfo', [], _(b'[PATH]'), norepo=True)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1693
def debugfsinfo(ui, path=b"."):
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
  1694
    """show information detected about current filesystem"""
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1695
    ui.writenoi18n(b'path: %s\n' % path)
43094
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1696
    ui.writenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1697
        b'mounted on: %s\n' % (util.getfsmountpoint(path) or b'(unknown)')
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1698
    )
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1699
    ui.writenoi18n(b'exec: %s\n' % (util.checkexec(path) and b'yes' or b'no'))
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1700
    ui.writenoi18n(b'fstype: %s\n' % (util.getfstype(path) or b'(unknown)'))
43094
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1701
    ui.writenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1702
        b'symlink: %s\n' % (util.checklink(path) and b'yes' or b'no')
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1703
    )
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1704
    ui.writenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1705
        b'hardlink: %s\n' % (util.checknlink(path) and b'yes' or b'no')
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  1706
    )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1707
    casesensitive = b'(unknown)'
31634
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
  1708
    try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1709
        with pycompat.namedtempfile(prefix=b'.debugfsinfo', dir=path) as f:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1710
            casesensitive = util.fscasesensitive(f.name) and b'yes' or b'no'
31634
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
  1711
    except OSError:
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
  1712
        pass
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1713
    ui.writenoi18n(b'case-sensitive: %s\n' % casesensitive)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1714
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1715
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1716
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1717
    b'debuggetbundle',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1718
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1719
        (b'H', b'head', [], _(b'id of head node'), _(b'ID')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1720
        (b'C', b'common', [], _(b'id of common node'), _(b'ID')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1721
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1722
            b't',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1723
            b'type',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1724
            b'bzip2',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1725
            _(b'bundle compression type to use'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1726
            _(b'TYPE'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1727
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1728
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1729
    _(b'REPO FILE [-H|-C ID]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1730
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1731
)
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1732
def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts):
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1733
    """retrieves a bundle from a repo
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1734
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1735
    Every ID must be a full-length hex node id string. Saves the bundle to the
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1736
    given file.
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1737
    """
50953
7825175d5ad5 debuggetbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50952
diff changeset
  1738
    repo = hg.peer(ui, pycompat.byteskwargs(opts), repopath)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1739
    if not repo.capable(b'getbundle'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1740
        raise error.Abort(b"getbundle() not supported by target repository")
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1741
    args = {}
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1742
    if common:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1743
        args['common'] = [bin(s) for s in common]
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1744
    if head:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1745
        args['heads'] = [bin(s) for s in head]
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1746
    # TODO: get desired bundlecaps from command line.
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  1747
    args['bundlecaps'] = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1748
    bundle = repo.getbundle(b'debug', **args)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1749
50953
7825175d5ad5 debuggetbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50952
diff changeset
  1750
    bundletype = opts.get('type', b'bzip2').lower()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1751
    btypes = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1752
        b'none': b'HG10UN',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1753
        b'bzip2': b'HG10BZ',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1754
        b'gzip': b'HG10GZ',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1755
        b'bundle2': b'HG20',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1756
    }
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1757
    bundletype = btypes.get(bundletype)
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1758
    if bundletype not in bundle2.bundletypes:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1759
        raise error.Abort(_(b'unknown bundle type specified with --type'))
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
  1760
    bundle2.writebundle(ui, bundle, bundlepath, bundletype)
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1761
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1762
50548
720a23405fe9 debug: update usage strings of debugignore and debugnodemap
Anton Shestakov <av6@dwimlabs.net>
parents: 50547
diff changeset
  1763
@command(b'debugignore', [], b'[FILE]...')
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1764
def debugignore(ui, repo, *files, **opts):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1765
    """display the combined ignore pattern and information about ignored files
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1766
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1767
    With no argument display the combined ignore pattern.
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1768
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1769
    Given space separated file names, shows if the given file is ignored and
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1770
    if so, show the ignore rule (file and line number) that matched it.
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1771
    """
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1772
    ignore = repo.dirstate._ignore
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1773
    if not files:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1774
        # Show all the patterns
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1775
        ui.write(b"%s\n" % pycompat.byterepr(ignore))
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1776
    else:
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
  1777
        m = scmutil.match(repo[None], pats=files)
41636
be8741d42836 debugignore: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41515
diff changeset
  1778
        uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
  1779
        for f in m.files():
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1780
            nf = util.normpath(f)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1781
            ignored = None
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1782
            ignoredata = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1783
            if nf != b'.':
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1784
                if ignore(nf):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1785
                    ignored = nf
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1786
                    ignoredata = repo.dirstate._ignorefileandline(nf)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1787
                else:
43633
0b7733719d21 utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
  1788
                    for p in pathutil.finddirs(nf):
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1789
                        if ignore(p):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1790
                            ignored = p
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1791
                            ignoredata = repo.dirstate._ignorefileandline(p)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1792
                            break
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1793
            if ignored:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1794
                if ignored == nf:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1795
                    ui.write(_(b"%s is ignored\n") % uipathfn(f))
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1796
                else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1797
                    ui.write(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1798
                        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1799
                            b"%s is ignored because of "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1800
                            b"containing directory %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1801
                        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1802
                        % (uipathfn(f), ignored)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1803
                    )
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1804
                ignorefile, lineno, line = ignoredata
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1805
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1806
                    _(b"(ignore rule in %s, line %d: '%s')\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1807
                    % (ignorefile, lineno, line)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1808
                )
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
  1809
            else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1810
                ui.write(_(b"%s is not ignored\n") % uipathfn(f))
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1811
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1812
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1813
@command(
49249
db19f6be0442 debugindex: rename to debugindex debug-revlog-index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49248
diff changeset
  1814
    b'debug-revlog-index|debugindex',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1815
    cmdutil.debugrevlogopts + cmdutil.formatteropts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1816
    _(b'-c|-m|FILE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1817
)
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1818
def debugindex(ui, repo, file_=None, **opts):
49249
db19f6be0442 debugindex: rename to debugindex debug-revlog-index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49248
diff changeset
  1819
    """dump index data for a revlog"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1820
    opts = pycompat.byteskwargs(opts)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1821
    store = cmdutil.openstorage(repo, b'debugindex', file_, opts)
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1822
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1823
    fm = ui.formatter(b'debugindex', opts)
49250
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1824
50617
88362b8bc476 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50564
diff changeset
  1825
    revlog = getattr(store, '_revlog', store)
49253
a321304269cf debugindex: move to a flexible column
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49250
diff changeset
  1826
49250
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1827
    return revlog_debug.debug_index(
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1828
        ui,
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1829
        repo,
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1830
        formatter=fm,
49253
a321304269cf debugindex: move to a flexible column
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49250
diff changeset
  1831
        revlog=revlog,
49250
61cf3d39fd9e debugindex: move the logic into its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49249
diff changeset
  1832
        full_node=ui.debugflag,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1833
    )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  1834
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1835
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1836
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1837
    b'debugindexdot',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1838
    cmdutil.debugrevlogopts,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1839
    _(b'-c|-m|FILE'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1840
    optionalrepo=True,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1841
)
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1842
def debugindexdot(ui, repo, file_=None, **opts):
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1843
    """dump an index DAG as a graphviz dot file"""
50954
1cfc49e342c3 debugindexdot: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50953
diff changeset
  1844
    r = cmdutil.openstorage(
1cfc49e342c3 debugindexdot: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50953
diff changeset
  1845
        repo, b'debugindexdot', file_, pycompat.byteskwargs(opts)
1cfc49e342c3 debugindexdot: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50953
diff changeset
  1846
    )
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  1847
    ui.writenoi18n(b"digraph G {\n")
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1848
    for i in r:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1849
        node = r.node(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1850
        pp = r.parents(node)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1851
        ui.write(b"\t%d -> %d\n" % (r.rev(pp[0]), i))
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  1852
        if pp[1] != repo.nullid:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1853
            ui.write(b"\t%d -> %d\n" % (r.rev(pp[1]), i))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1854
    ui.write(b"}\n")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1855
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1856
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1857
@command(b'debugindexstats', [])
39980
d71e0ba34d9b debugcommands: add a debugindexstats command
Martin von Zweigbergk <martinvonz@google.com>
parents: 39956
diff changeset
  1858
def debugindexstats(ui, repo):
d71e0ba34d9b debugcommands: add a debugindexstats command
Martin von Zweigbergk <martinvonz@google.com>
parents: 39956
diff changeset
  1859
    """show stats related to the changelog index"""
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  1860
    repo.changelog.shortest(repo.nullid, 1)
40365
4f37af86d5d5 debugcommands: avoid stack trace from debugindexstats in pure mode
Martin von Zweigbergk <martinvonz@google.com>
parents: 40174
diff changeset
  1861
    index = repo.changelog.index
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1862
    if not hasattr(index, 'stats'):
51232
3551f2a1c963 debugindexstats: handle the lack of Rust support better
Raphaël Gomès <rgomes@octobus.net>
parents: 51076
diff changeset
  1863
        raise error.Abort(_(b'debugindexstats only works with native C code'))
40365
4f37af86d5d5 debugcommands: avoid stack trace from debugindexstats in pure mode
Martin von Zweigbergk <martinvonz@google.com>
parents: 40174
diff changeset
  1864
    for k, v in sorted(index.stats().items()):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1865
        ui.write(b'%s: %d\n' % (k, v))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1866
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1867
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1868
@command(b'debuginstall', [] + cmdutil.formatteropts, b'', norepo=True)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1869
def debuginstall(ui, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1870
    """test Mercurial installation
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1871
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1872
    Returns 0 on success.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  1873
    """
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1874
    problems = 0
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1875
50955
45a53fc82ab2 debuginstall: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50954
diff changeset
  1876
    fm = ui.formatter(b'debuginstall', pycompat.byteskwargs(opts))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1877
    fm.startitem()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1878
45100
d50d922ca02b debuginstall: don't translate encoding messages
Yuya Nishihara <yuya@tcha.org>
parents: 44870
diff changeset
  1879
    # encoding might be unknown or wrong. don't translate these messages.
d50d922ca02b debuginstall: don't translate encoding messages
Yuya Nishihara <yuya@tcha.org>
parents: 44870
diff changeset
  1880
    fm.write(b'encoding', b"checking encoding (%s)...\n", encoding.encoding)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1881
    err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1882
    try:
34129
902219a99901 debuginstall: use codecs.lookup() to detect invalid encoding
Yuya Nishihara <yuya@tcha.org>
parents: 34120
diff changeset
  1883
        codecs.lookup(pycompat.sysstr(encoding.encoding))
902219a99901 debuginstall: use codecs.lookup() to detect invalid encoding
Yuya Nishihara <yuya@tcha.org>
parents: 34120
diff changeset
  1884
    except LookupError as inst:
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
  1885
        err = stringutil.forcebytestr(inst)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1886
        problems += 1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1887
    fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1888
        err,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1889
        b'encodingerror',
45100
d50d922ca02b debuginstall: don't translate encoding messages
Yuya Nishihara <yuya@tcha.org>
parents: 44870
diff changeset
  1890
        b" %s\n (check that your locale is properly set)\n",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1891
        err,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1892
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1893
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1894
    # Python
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1895
    pythonlib = None
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1896
    if hasattr(os, '__file__'):
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1897
        pythonlib = os.path.dirname(pycompat.fsencode(os.__file__))
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1898
    elif getattr(sys, 'oxidized', False):
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1899
        pythonlib = pycompat.sysexecutable
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1900
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1901
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1902
        b'pythonexe',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1903
        _(b"checking Python executable (%s)\n"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1904
        pycompat.sysexecutable or _(b"unknown"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1905
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1906
    fm.write(
44145
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
  1907
        b'pythonimplementation',
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
  1908
        _(b"checking Python implementation (%s)\n"),
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
  1909
        pycompat.sysbytes(platform.python_implementation()),
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
  1910
    )
0b475b0b0344 debugcommands: add Python implementation to debuginstall
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44123
diff changeset
  1911
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1912
        b'pythonver',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1913
        _(b"checking Python version (%s)\n"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1914
        (b"%d.%d.%d" % sys.version_info[:3]),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1915
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1916
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1917
        b'pythonlib',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1918
        _(b"checking Python lib (%s)...\n"),
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1919
        pythonlib or _(b"unknown"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1920
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1921
44463
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1922
    try:
46785
521ac0d7047f typing: disable import error warnings that are already handled
Matt Harbison <matt_harbison@yahoo.com>
parents: 46689
diff changeset
  1923
        from . import rustext  # pytype: disable=import-error
44463
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1924
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1925
        rustext.__doc__  # trigger lazy import
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1926
    except ImportError:
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1927
        rustext = None
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1928
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1929
    security = set(sslutil.supportedprotocols)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1930
    if sslutil.hassni:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1931
        security.add(b'sni')
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1932
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1933
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1934
        b'pythonsecurity',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1935
        _(b"checking Python security support (%s)\n"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1936
        fm.formatlist(sorted(security), name=b'protocol', fmt=b'%s', sep=b','),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1937
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1938
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1939
    # These are warnings, not errors. So don't increment problem count. This
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1940
    # may change in the future.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1941
    if b'tls1.2' not in security:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1942
        fm.plain(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1943
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1944
                b'  TLS 1.2 not supported by Python install; '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1945
                b'network connections lack modern security\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1946
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1947
        )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1948
    if b'sni' not in security:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1949
        fm.plain(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1950
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1951
                b'  SNI not supported by Python install; may have '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1952
                b'connectivity issues with some servers\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1953
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1954
        )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1955
44463
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1956
    fm.plain(
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1957
        _(
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1958
            b"checking Rust extensions (%s)\n"
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1959
            % (b'missing' if rustext is None else b'installed')
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1960
        ),
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1961
    )
295417387769 debuginstall: print if Rust extensions are installed
Raphaël Gomès <rgomes@octobus.net>
parents: 44452
diff changeset
  1962
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1963
    # TODO print CA cert info
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1964
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1965
    # hg version
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1966
    hgver = util.version()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1967
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1968
        b'hgver', _(b"checking Mercurial version (%s)\n"), hgver.split(b'+')[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1969
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1970
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1971
        b'hgverextra',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1972
        _(b"checking Mercurial custom build (%s)\n"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1973
        b'+'.join(hgver.split(b'+')[1:]),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1974
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1975
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1976
    # compiled modules
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1977
    hgmodules = None
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  1978
    if hasattr(sys.modules[__name__], '__file__'):
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1979
        hgmodules = os.path.dirname(pycompat.fsencode(__file__))
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1980
    elif getattr(sys, 'oxidized', False):
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1981
        hgmodules = pycompat.sysexecutable
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1982
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1983
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1984
        b'hgmodulepolicy', _(b"checking module policy (%s)\n"), policy.policy
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1985
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1986
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1987
        b'hgmodules',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1988
        _(b"checking installed modules (%s)...\n"),
43686
1fb19665c166 debuginstall: gracefully handle missing __file__ attributes
Matt Harbison <matt_harbison@yahoo.com>
parents: 43635
diff changeset
  1989
        hgmodules or _(b"unknown"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  1990
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1991
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1992
    rustandc = policy.policy in (b'rust+c', b'rust+c-allow')
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  1993
    rustext = rustandc  # for now, that's the only case
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1994
    cext = policy.policy in (b'c', b'allow') or rustandc
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  1995
    nopure = cext or rustext
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  1996
    if nopure:
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1997
        err = None
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1998
        try:
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  1999
            if cext:
43703
a9b14ef701d1 debugcommands: suppress import errors for pytype
Augie Fackler <augie@google.com>
parents: 43687
diff changeset
  2000
                from .cext import (  # pytype: disable=import-error
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2001
                    base85,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2002
                    bdiff,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2003
                    mpatch,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2004
                    osutil,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2005
                )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2006
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2007
                # quiet pyflakes
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2008
                dir(bdiff), dir(mpatch), dir(base85), dir(osutil)
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2009
            if rustext:
43703
a9b14ef701d1 debugcommands: suppress import errors for pytype
Augie Fackler <augie@google.com>
parents: 43687
diff changeset
  2010
                from .rustext import (  # pytype: disable=import-error
42451
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2011
                    ancestor,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2012
                    dirstate,
810f66b468cd rust: module policy with importrust
Georges Racinet <georges.racinet@octobus.net>
parents: 42145
diff changeset
  2013
                )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2014
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2015
                dir(ancestor), dir(dirstate)  # quiet pyflakes
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  2016
        except Exception as inst:
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
  2017
            err = stringutil.forcebytestr(inst)
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  2018
            problems += 1
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2019
        fm.condwrite(err, b'extensionserror', b" %s\n", err)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2020
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2021
    compengines = util.compengines._engines.values()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2022
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2023
        b'compengines',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2024
        _(b'checking registered compression engines (%s)\n'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2025
        fm.formatlist(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2026
            sorted(e.name() for e in compengines),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2027
            name=b'compengine',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2028
            fmt=b'%s',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2029
            sep=b', ',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2030
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2031
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2032
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2033
        b'compenginesavail',
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  2034
        _(b'checking available compression engines (%s)\n'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2035
        fm.formatlist(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2036
            sorted(e.name() for e in compengines if e.available()),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2037
            name=b'compengine',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2038
            fmt=b'%s',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2039
            sep=b', ',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2040
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2041
    )
42041
3e47d1ec9da5 util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42035
diff changeset
  2042
    wirecompengines = compression.compengines.supportedwireengines(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2043
        compression.SERVERROLE
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2044
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2045
    fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2046
        b'compenginesserver',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2047
        _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2048
            b'checking available compression engines '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2049
            b'for wire protocol (%s)\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2050
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2051
        fm.formatlist(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2052
            [e.name() for e in wirecompengines if e.wireprotosupport()],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2053
            name=b'compengine',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2054
            fmt=b'%s',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2055
            sep=b', ',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2056
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2057
    )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2058
    re2 = b'missing'
50689
a45460e235a2 re2: fix reporting of availability in `hg debuginstall`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50347
diff changeset
  2059
    if util.has_re2():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2060
        re2 = b'available'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2061
    fm.plain(_(b'checking "re2" regexp engine (%s)\n') % re2)
35448
8251c4c4abdc debuginstall: add a line about re2 availability
Boris Feld <boris.feld@octobus.net>
parents: 35424
diff changeset
  2062
    fm.data(re2=bool(util._re2))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2063
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2064
    # templates
45199
91aa9bba3dc9 templater: make templatepaths() return a single path, or None
Martin von Zweigbergk <martinvonz@google.com>
parents: 45149
diff changeset
  2065
    p = templater.templatedir()
45213
d5ccc059fbcd templater: handle None returned from templatedir()
Martin von Zweigbergk <martinvonz@google.com>
parents: 45199
diff changeset
  2066
    fm.write(b'templatedirs', b'checking templates (%s)...\n', p or b'')
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2067
    fm.condwrite(not p, b'', _(b" no template directories found\n"))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2068
    if p:
45320
4aa484efc926 templater: add exception-raising version of open_template()
Martin von Zweigbergk <martinvonz@google.com>
parents: 45309
diff changeset
  2069
        (m, fp) = templater.try_open_template(b"map-cmdline.default")
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2070
        if m:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2071
            # template found, check if it is working
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2072
            err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2073
            try:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2074
                templater.templater.frommapfile(m)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2075
            except Exception as inst:
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
  2076
                err = stringutil.forcebytestr(inst)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2077
                p = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2078
            fm.condwrite(err, b'defaulttemplateerror', b" %s\n", err)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2079
        else:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2080
            p = None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2081
        fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2082
            p, b'defaulttemplate', _(b"checking default template (%s)\n"), m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2083
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2084
        fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2085
            not m,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2086
            b'defaulttemplatenotfound',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2087
            _(b" template '%s' not found\n"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2088
            b"default",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2089
        )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2090
    if not p:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2091
        problems += 1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2092
    fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2093
        not p, b'', _(b" (templates seem to have been installed incorrectly)\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2094
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2095
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2096
    # editor
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2097
    editor = ui.geteditor()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2098
    editor = util.expandpath(editor)
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
  2099
    editorbin = procutil.shellsplit(editor)[0]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2100
    fm.write(b'editor', _(b"checking commit editor... (%s)\n"), editorbin)
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
  2101
    cmdpath = procutil.findexe(editorbin)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2102
    fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2103
        not cmdpath and editor == b'vi',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2104
        b'vinotfound',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2105
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2106
            b" No commit editor set and can't find %s in PATH\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2107
            b" (specify a commit editor in your configuration"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2108
            b" file)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2109
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2110
        not cmdpath and editor == b'vi' and editorbin,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2111
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2112
    fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2113
        not cmdpath and editor != b'vi',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2114
        b'editornotfound',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2115
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2116
            b" Can't find editor '%s' in PATH\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2117
            b" (specify a commit editor in your configuration"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2118
            b" file)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2119
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2120
        not cmdpath and editorbin,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2121
    )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2122
    if not cmdpath and editor != b'vi':
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2123
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2124
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2125
    # check username
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2126
    username = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2127
    err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2128
    try:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2129
        username = ui.username()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2130
    except error.Abort as e:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 45665
diff changeset
  2131
        err = e.message
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2132
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2133
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2134
    fm.condwrite(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2135
        username, b'username', _(b"checking username (%s)\n"), username
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2136
    )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2137
    fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2138
        err,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2139
        b'usernameerror',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2140
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2141
            b"checking username...\n %s\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2142
            b" (specify a username in your configuration file)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2143
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2144
        err,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2145
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2146
42651
7f1df7019497 debugcommands: add support for extensions adding their own debug info
Augie Fackler <augie@google.com>
parents: 42580
diff changeset
  2147
    for name, mod in extensions.extensions():
7f1df7019497 debugcommands: add support for extensions adding their own debug info
Augie Fackler <augie@google.com>
parents: 42580
diff changeset
  2148
        handler = getattr(mod, 'debuginstall', None)
7f1df7019497 debugcommands: add support for extensions adding their own debug info
Augie Fackler <augie@google.com>
parents: 42580
diff changeset
  2149
        if handler is not None:
7f1df7019497 debugcommands: add support for extensions adding their own debug info
Augie Fackler <augie@google.com>
parents: 42580
diff changeset
  2150
            problems += handler(ui, fm)
7f1df7019497 debugcommands: add support for extensions adding their own debug info
Augie Fackler <augie@google.com>
parents: 42580
diff changeset
  2151
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2152
    fm.condwrite(not problems, b'', _(b"no problems detected\n"))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2153
    if not problems:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2154
        fm.data(problems=problems)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2155
    fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2156
        problems,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2157
        b'problems',
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  2158
        _(b"%d problems detected, please check your install!\n"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2159
        problems,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2160
    )
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2161
    fm.end()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2162
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2163
    return problems
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  2164
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2165
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2166
@command(b'debugknown', [], _(b'REPO ID...'), norepo=True)
30919
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2167
def debugknown(ui, repopath, *ids, **opts):
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2168
    """test whether node ids are known to a repo
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2169
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2170
    Every ID must be a full-length hex node id string. Returns a list of 0s
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2171
    and 1s indicating unknown/known.
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2172
    """
50956
0cf89b099d42 debugknown: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50955
diff changeset
  2173
    repo = hg.peer(ui, pycompat.byteskwargs(opts), repopath)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2174
    if not repo.capable(b'known'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2175
        raise error.Abort(b"known() not supported by target repository")
30919
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  2176
    flags = repo.known([bin(s) for s in ids])
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2177
    ui.write(b"%s\n" % (b"".join([f and b"1" or b"0" for f in flags])))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2178
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2179
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2180
@command(b'debuglabelcomplete', [], _(b'LABEL...'))
30935
e46533c3201e debugcommands: move 'debuglabelcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30919
diff changeset
  2181
def debuglabelcomplete(ui, repo, *args):
e46533c3201e debugcommands: move 'debuglabelcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30919
diff changeset
  2182
    '''backwards compatibility with old bash completion scripts (DEPRECATED)'''
31402
ea0395eec67b debuglabelcomplete: fix to call debugnamecomplete in new location
Kyle Lippincott <spectral@google.com>
parents: 31239
diff changeset
  2183
    debugnamecomplete(ui, repo, *args)
30935
e46533c3201e debugcommands: move 'debuglabelcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30919
diff changeset
  2184
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2185
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2186
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2187
    b'debuglocks',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2188
    [
46237
bc884e31b8c8 debuglock: rename flag names to better clarity
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46211
diff changeset
  2189
        (b'L', b'force-free-lock', None, _(b'free the store lock (DANGEROUS)')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2190
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2191
            b'W',
46237
bc884e31b8c8 debuglock: rename flag names to better clarity
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46211
diff changeset
  2192
            b'force-free-wlock',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2193
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2194
            _(b'free the working state lock (DANGEROUS)'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2195
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2196
        (b's', b'set-lock', None, _(b'set the store lock until stopped')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2197
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2198
            b'S',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2199
            b'set-wlock',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2200
            None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2201
            _(b'set the working state lock until stopped'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2202
        ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2203
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2204
    _(b'[OPTION]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2205
)
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2206
def debuglocks(ui, repo, **opts):
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2207
    """show or modify state of locks
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2208
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2209
    By default, this command will show which locks are held. This
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2210
    includes the user and process holding the lock, the amount of time
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2211
    the lock has been held, and the machine name where the process is
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2212
    running if it's not local.
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2213
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2214
    Locks protect the integrity of Mercurial's data, so should be
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2215
    treated with care. System crashes or other interruptions may cause
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2216
    locks to not be properly released, though Mercurial will usually
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2217
    detect and remove such stale locks automatically.
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2218
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2219
    However, detecting stale locks may not always be possible (for
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2220
    instance, on a shared filesystem). Removing locks may also be
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2221
    blocked by filesystem permissions.
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2222
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2223
    Setting a lock will prevent other commands from changing the data.
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2224
    The command will wait until an interruption (SIGINT, SIGTERM, ...) occurs.
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2225
    The set locks are removed when the command exits.
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2226
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2227
    Returns 0 if no locks are held.
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2228
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2229
    """
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2230
46237
bc884e31b8c8 debuglock: rename flag names to better clarity
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46211
diff changeset
  2231
    if opts.get('force_free_lock'):
49048
020378f32d57 debuglock: ignore ENOENT error when unlocking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48691
diff changeset
  2232
        repo.svfs.tryunlink(b'lock')
46237
bc884e31b8c8 debuglock: rename flag names to better clarity
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46211
diff changeset
  2233
    if opts.get('force_free_wlock'):
49048
020378f32d57 debuglock: ignore ENOENT error when unlocking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48691
diff changeset
  2234
        repo.vfs.tryunlink(b'wlock')
46237
bc884e31b8c8 debuglock: rename flag names to better clarity
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46211
diff changeset
  2235
    if opts.get('force_free_lock') or opts.get('force_free_wlock'):
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2236
        return 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2237
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2238
    locks = []
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2239
    try:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2240
        if opts.get('set_wlock'):
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2241
            try:
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2242
                locks.append(repo.wlock(False))
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2243
            except error.LockHeld:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2244
                raise error.Abort(_(b'wlock is already held'))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2245
        if opts.get('set_lock'):
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2246
            try:
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2247
                locks.append(repo.lock(False))
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2248
            except error.LockHeld:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2249
                raise error.Abort(_(b'lock is already held'))
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2250
        if len(locks):
49197
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2251
            try:
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2252
                if ui.interactive():
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2253
                    prompt = _(b"ready to release the lock (y)? $$ &Yes")
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2254
                    ui.promptchoice(prompt)
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2255
                else:
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2256
                    msg = b"%d locks held, waiting for signal\n"
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2257
                    msg %= len(locks)
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2258
                    ui.status(msg)
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2259
                    while True:  # XXX wait for a signal
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2260
                        time.sleep(0.1)
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2261
            except KeyboardInterrupt:
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2262
                msg = b"signal-received releasing locks\n"
883be4c74d54 debuglock: make the command more useful in non-interactive mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49183
diff changeset
  2263
                ui.status(msg)
35395
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2264
            return 0
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2265
    finally:
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2266
        release(*locks)
12055fb3ba30 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net>
parents: 35394
diff changeset
  2267
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2268
    now = time.time()
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2269
    held = 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2270
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2271
    def report(vfs, name, method):
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2272
        # this causes stale locks to get reaped for more accurate reporting
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2273
        try:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2274
            l = method(False)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2275
        except error.LockHeld:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2276
            l = None
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2277
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2278
        if l:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2279
            l.release()
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2280
        else:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2281
            try:
36781
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36778
diff changeset
  2282
                st = vfs.lstat(name)
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36778
diff changeset
  2283
                age = now - st[stat.ST_MTIME]
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36778
diff changeset
  2284
                user = util.username(st.st_uid)
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2285
                locker = vfs.readlock(name)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2286
                if b":" in locker:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2287
                    host, pid = locker.split(b':')
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2288
                    if host == socket.gethostname():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2289
                        locker = b'user %s, process %s' % (user or b'None', pid)
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2290
                    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2291
                        locker = b'user %s, process %s, host %s' % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2292
                            user or b'None',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2293
                            pid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2294
                            host,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2295
                        )
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  2296
                ui.writenoi18n(b"%-6s %s (%ds)\n" % (name + b":", locker, age))
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2297
                return 1
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49284
diff changeset
  2298
            except FileNotFoundError:
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49284
diff changeset
  2299
                pass
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2300
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  2301
        ui.writenoi18n(b"%-6s free\n" % (name + b":"))
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2302
        return 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2303
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2304
    held += report(repo.svfs, b"lock", repo.lock)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2305
    held += report(repo.vfs, b"wlock", repo.wlock)
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2306
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2307
    return held
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  2308
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2309
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2310
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2311
    b'debugmanifestfulltextcache',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2312
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2313
        (b'', b'clear', False, _(b'clear the cache')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2314
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2315
            b'a',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2316
            b'add',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2317
            [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2318
            _(b'add the given manifest nodes to the cache'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2319
            _(b'NODE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2320
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2321
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2322
    b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2323
)
41958
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2324
def debugmanifestfulltextcache(ui, repo, add=(), **opts):
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2325
    """show, clear or amend the contents of the manifest fulltext cache"""
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2326
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2327
    def getcache():
39244
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39163
diff changeset
  2328
        r = repo.manifestlog.getstorage(b'')
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2329
        try:
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2330
            return r._fulltextcache
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2331
        except AttributeError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2332
            msg = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2333
                b"Current revlog implementation doesn't appear to have a "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2334
                b"manifest fulltext cache\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2335
            )
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2336
            raise error.Abort(msg)
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2337
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2338
    if opts.get('clear'):
41964
d121823072b8 manifestcache: protect write with `wlock` instead of `lock`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41959
diff changeset
  2339
        with repo.wlock():
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2340
            cache = getcache()
41947
b74ef67573e5 manifestcache: actually honor --clear
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41943
diff changeset
  2341
            cache.clear(clear_persisted_data=True)
b74ef67573e5 manifestcache: actually honor --clear
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41943
diff changeset
  2342
            return
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2343
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2344
    if add:
41964
d121823072b8 manifestcache: protect write with `wlock` instead of `lock`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41959
diff changeset
  2345
        with repo.wlock():
41958
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2346
            m = repo.manifestlog
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2347
            store = m.getstorage(b'')
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2348
            for n in add:
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2349
                try:
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2350
                    manifest = m[store.lookup(n)]
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2351
                except error.LookupError as e:
46689
8408c3198ec1 debug: convert a few exceptions to bytes before wrapping in another error
Matt Harbison <matt_harbison@yahoo.com>
parents: 46237
diff changeset
  2352
                    raise error.Abort(
8408c3198ec1 debug: convert a few exceptions to bytes before wrapping in another error
Matt Harbison <matt_harbison@yahoo.com>
parents: 46237
diff changeset
  2353
                        bytes(e), hint=b"Check your manifest node id"
8408c3198ec1 debug: convert a few exceptions to bytes before wrapping in another error
Matt Harbison <matt_harbison@yahoo.com>
parents: 46237
diff changeset
  2354
                    )
41958
1fe278aa4ad5 manifestcache: support multiple cache addition in one debug command run
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41947
diff changeset
  2355
                manifest.read()  # stores revisision in cache too
41943
1e75311d78f7 manifestcache: do not display data when using --add
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41942
diff changeset
  2356
            return
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2357
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2358
    cache = getcache()
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2359
    if not len(cache):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2360
        ui.write(_(b'cache empty\n'))
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2361
    else:
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2362
        ui.write(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2363
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2364
                b'cache contains %d manifest entries, in order of most to '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2365
                b'least recent:\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2366
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2367
            % (len(cache),)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2368
        )
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2369
        totalsize = 0
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2370
        for nodeid in cache:
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2371
            # Use cache.get to not update the LRU order
41959
e3307243d188 manifestcache: stop altering the lru cache order while displaying it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41958
diff changeset
  2372
            data = cache.peek(nodeid)
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2373
            size = len(data)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2374
            totalsize += size + 24  # 20 bytes nodeid, 4 bytes size
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2375
            ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2376
                _(b'id: %s, size %s\n') % (hex(nodeid), util.bytecount(size))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2377
            )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2378
        ondisk = cache._opener.stat(b'manifestfulltextcache').st_size
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2379
        ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2380
            _(b'total cache data size %s, on-disk %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2381
            % (util.bytecount(totalsize), util.bytecount(ondisk))
41942
fbee66c90cef manifestcache: only lock the repository if the debug command touch the cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41941
diff changeset
  2382
        )
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38707
diff changeset
  2383
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2384
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2385
@command(b'debugmergestate', [] + cmdutil.templateopts, b'')
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2386
def debugmergestate(ui, repo, *args, **opts):
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2387
    """print merge state
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2388
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2389
    Use --verbose to print out information about whether v1 or v2 merge state
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2390
    was chosen."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2391
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2392
    if ui.verbose:
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2393
        ms = mergestatemod.mergestate(repo)
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2394
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2395
        # sort so that reasonable information is on top
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2396
        v1records = ms._readrecordsv1()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2397
        v2records = ms._readrecordsv2()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2398
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2399
        if not v1records and not v2records:
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2400
            pass
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2401
        elif not v2records:
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2402
            ui.writenoi18n(b'no version 2 merge state\n')
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2403
        elif ms._v1v2match(v1records, v2records):
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2404
            ui.writenoi18n(b'v1 and v2 states match: using v2\n')
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2405
        else:
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2406
            ui.writenoi18n(b'v1 and v2 states mismatch: using v1\n')
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2407
50957
81801dc55819 debugmergestate: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50956
diff changeset
  2408
    if not opts['template']:
81801dc55819 debugmergestate: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50956
diff changeset
  2409
        opts['template'] = (
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2410
            b'{if(commits, "", "no merge state found\n")}'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2411
            b'{commits % "{name}{if(label, " ({label})")}: {node}\n"}'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2412
            b'{files % "file: {path} (state \\"{state}\\")\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2413
            b'{if(local_path, "'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2414
            b'  local path: {local_path} (hash {local_key}, flags \\"{local_flags}\\")\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2415
            b'  ancestor path: {ancestor_path} (node {ancestor_node})\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2416
            b'  other path: {other_path} (node {other_node})\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2417
            b'")}'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2418
            b'{if(rename_side, "'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2419
            b'  rename side: {rename_side}\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2420
            b'  renamed path: {renamed_path}\n'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2421
            b'")}'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2422
            b'{extras % "  extra: {key} = {value}\n"}'
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2423
            b'"}'
45445
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2424
            b'{extras % "extra: {file} ({key} = {value})\n"}'
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2425
        )
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2426
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2427
    ms = mergestatemod.mergestate.read(repo)
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2428
50957
81801dc55819 debugmergestate: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50956
diff changeset
  2429
    fm = ui.formatter(b'debugmergestate', pycompat.byteskwargs(opts))
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2430
    fm.startitem()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2431
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2432
    fm_commits = fm.nested(b'commits')
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2433
    if ms.active():
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2434
        for name, node, label_index in (
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2435
            (b'local', ms.local, 0),
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2436
            (b'other', ms.other, 1),
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2437
        ):
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2438
            fm_commits.startitem()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2439
            fm_commits.data(name=name)
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2440
            fm_commits.data(node=hex(node))
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2441
            if ms._labels and len(ms._labels) > label_index:
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2442
                fm_commits.data(label=ms._labels[label_index])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2443
    fm_commits.end()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2444
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2445
    fm_files = fm.nested(b'files')
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2446
    if ms.active():
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2447
        for f in ms:
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2448
            fm_files.startitem()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2449
            fm_files.data(path=f)
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2450
            state = ms._state[f]
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2451
            fm_files.data(state=state[0])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2452
            if state[0] in (
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2453
                mergestatemod.MERGE_RECORD_UNRESOLVED,
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2454
                mergestatemod.MERGE_RECORD_RESOLVED,
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2455
            ):
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2456
                fm_files.data(local_key=state[1])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2457
                fm_files.data(local_path=state[2])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2458
                fm_files.data(ancestor_path=state[3])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2459
                fm_files.data(ancestor_node=state[4])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2460
                fm_files.data(other_path=state[5])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2461
                fm_files.data(other_node=state[6])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2462
                fm_files.data(local_flags=state[7])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2463
            elif state[0] in (
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2464
                mergestatemod.MERGE_RECORD_UNRESOLVED_PATH,
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44660
diff changeset
  2465
                mergestatemod.MERGE_RECORD_RESOLVED_PATH,
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2466
            ):
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2467
                fm_files.data(renamed_path=state[1])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2468
                fm_files.data(rename_side=state[2])
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2469
            fm_extras = fm_files.nested(b'extras')
45446
00e4e97c6bc8 debugmergestate: sort extras before printing
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45445
diff changeset
  2470
            for k, v in sorted(ms.extras(f).items()):
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2471
                fm_extras.startitem()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2472
                fm_extras.data(key=k)
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2473
                fm_extras.data(value=v)
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2474
            fm_extras.end()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2475
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2476
    fm_files.end()
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2477
45445
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2478
    fm_extras = fm.nested(b'extras')
48921
c9774f5fa729 debugcommands: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
  2479
    for f, d in sorted(ms.allextras().items()):
45445
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2480
        if f in ms:
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2481
            # If file is in mergestate, we have already processed it's extras
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2482
            continue
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
  2483
        for k, v in d.items():
45445
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2484
            fm_extras.startitem()
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2485
            fm_extras.data(file=f)
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2486
            fm_extras.data(key=k)
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2487
            fm_extras.data(value=v)
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2488
    fm_extras.end()
766797f23f77 debugmergestate: show extras for files which are not in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45320
diff changeset
  2489
44396
acbfa31cfaf2 debugmergestate: make templated
Martin von Zweigbergk <martinvonz@google.com>
parents: 44363
diff changeset
  2490
    fm.end()
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  2491
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2492
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2493
@command(b'debugnamecomplete', [], _(b'NAME...'))
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2494
def debugnamecomplete(ui, repo, *args):
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2495
    '''complete "names" - tags, open branch names, bookmark names'''
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2496
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2497
    names = set()
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2498
    # since we previously only listed open branches, we will handle that
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2499
    # specially (after this for loop)
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
  2500
    for name, ns in repo.names.items():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2501
        if name != b'branches':
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2502
            names.update(ns.listnames(repo))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2503
    names.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2504
        tag
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2505
        for (tag, heads, tip, closed) in repo.branchmap().iterbranches()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2506
        if not closed
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2507
    )
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2508
    completions = set()
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2509
    if not args:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2510
        args = [b'']
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2511
    for a in args:
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2512
        completions.update(n for n in names if n.startswith(a))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2513
    ui.write(b'\n'.join(sorted(completions)))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2514
    ui.write(b'\n')
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  2515
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2516
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2517
@command(
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2518
    b'debugnodemap',
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2519
    (
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2520
        cmdutil.debugrevlogopts
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2521
        + [
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2522
            (
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2523
                b'',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2524
                b'dump-new',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2525
                False,
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2526
                _(b'write a (new) persistent binary nodemap on stdout'),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2527
            ),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2528
            (b'', b'dump-disk', False, _(b'dump on-disk data on stdout')),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2529
            (
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2530
                b'',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2531
                b'check',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2532
                False,
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2533
                _(b'check that the data on disk data are correct.'),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2534
            ),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2535
            (
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2536
                b'',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2537
                b'metadata',
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2538
                False,
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2539
                _(b'display the on disk meta data for the nodemap'),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2540
            ),
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2541
        ]
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2542
    ),
50548
720a23405fe9 debug: update usage strings of debugignore and debugnodemap
Anton Shestakov <av6@dwimlabs.net>
parents: 50547
diff changeset
  2543
    _(b'-c|-m|FILE'),
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2544
)
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2545
def debugnodemap(ui, repo, file_=None, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  2546
    """write and inspect on disk nodemap"""
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2547
    if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2548
        if file_ is not None:
50547
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  2549
            raise error.InputError(
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  2550
                _(b'cannot specify a file with other arguments')
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  2551
            )
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2552
    elif file_ is None:
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2553
        opts['changelog'] = True
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2554
    r = cmdutil.openstorage(
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2555
        repo.unfiltered(), b'debugnodemap', file_, pycompat.byteskwargs(opts)
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2556
    )
50549
9dcb00842769 debug: `isinstance(a, x) or isinstance(a, y)` is `isinstance(a, (x, y))`
Anton Shestakov <av6@dwimlabs.net>
parents: 50548
diff changeset
  2557
    if isinstance(r, (manifest.manifestrevlog, filelog.filelog)):
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2558
        r = r._revlog
44309
6c07480d6659 nodemap: add a function to read the data from disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44307
diff changeset
  2559
    if opts['dump_new']:
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50718
diff changeset
  2560
        if hasattr(r.index, "nodemap_data_all"):
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2561
            data = r.index.nodemap_data_all()
44512
febe88a6f7f7 nodemap: use data from the index in debugnodemap --dump-new
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44463
diff changeset
  2562
        else:
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2563
            data = nodemap.persistent_data(r.index)
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2564
        ui.write(data)
44309
6c07480d6659 nodemap: add a function to read the data from disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44307
diff changeset
  2565
    elif opts['dump_disk']:
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2566
        nm_data = nodemap.persisted_data(r)
44323
76a96e3a2bbb nodemap: keep track of the docket for loaded data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44318
diff changeset
  2567
        if nm_data is not None:
76a96e3a2bbb nodemap: keep track of the docket for loaded data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44318
diff changeset
  2568
            docket, data = nm_data
44363
f7459da77f23 nodemap: introduce an option to use mmap to read the nodemap mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44350
diff changeset
  2569
            ui.write(data[:])
44318
20e125cdd719 nodemap: add basic checking of the on disk nodemap content
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44309
diff changeset
  2570
    elif opts['check']:
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2571
        nm_data = nodemap.persisted_data(r)
44323
76a96e3a2bbb nodemap: keep track of the docket for loaded data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44318
diff changeset
  2572
        if nm_data is not None:
76a96e3a2bbb nodemap: keep track of the docket for loaded data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44318
diff changeset
  2573
            docket, data = nm_data
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2574
            return nodemap.check_data(ui, r.index, data)
44334
6614b301ea58 nodemap: add a flag to dump the details of the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44323
diff changeset
  2575
    elif opts['metadata']:
50509
1b73868d17cf cli: make debugnodemap capable of inspecting an arbitrary nodemap
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50392
diff changeset
  2576
        nm_data = nodemap.persisted_data(r)
44334
6614b301ea58 nodemap: add a flag to dump the details of the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44323
diff changeset
  2577
        if nm_data is not None:
6614b301ea58 nodemap: add a flag to dump the details of the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44323
diff changeset
  2578
            docket, data = nm_data
6614b301ea58 nodemap: add a flag to dump the details of the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44323
diff changeset
  2579
            ui.write((b"uid: %s\n") % docket.uid)
44335
e41a164db7a9 nodemap: track the maximum revision tracked in the nodemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44334
diff changeset
  2580
            ui.write((b"tip-rev: %d\n") % docket.tip_rev)
44515
6c906eaedd0d nodemap: track the tip_node for validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44512
diff changeset
  2581
            ui.write((b"tip-node: %s\n") % hex(docket.tip_node))
44336
8374b69aef75 nodemap: track the total and unused amount of data in the rawdata file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44335
diff changeset
  2582
            ui.write((b"data-length: %d\n") % docket.data_length)
8374b69aef75 nodemap: track the total and unused amount of data in the rawdata file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44335
diff changeset
  2583
            ui.write((b"data-unused: %d\n") % docket.data_unused)
44635
99ea74cbed74 nodemap: display percentage of unused in `hg debugnodemap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44532
diff changeset
  2584
            unused_perc = docket.data_unused * 100.0 / docket.data_length
99ea74cbed74 nodemap: display percentage of unused in `hg debugnodemap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44532
diff changeset
  2585
            ui.write((b"data-unused: %2.3f%%\n") % unused_perc)
44307
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2586
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2587
c577bb4a04d4 nodemap: have some python code writing a nodemap in persistent binary form
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44306
diff changeset
  2588
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2589
    b'debugobsolete',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2590
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2591
        (b'', b'flags', 0, _(b'markers flag')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2592
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2593
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2594
            b'record-parents',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2595
            False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2596
            _(b'record parent information for the precursor'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2597
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2598
        (b'r', b'rev', [], _(b'display markers relevant to REV')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2599
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2600
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2601
            b'exclusive',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2602
            False,
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  2603
            _(b'restrict display to markers only relevant to REV'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2604
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2605
        (b'', b'index', False, _(b'display index of the marker')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2606
        (b'', b'delete', [], _(b'delete markers specified by indices')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2607
    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2608
    + cmdutil.commitopts2
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2609
    + cmdutil.formatteropts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2610
    _(b'[OBSOLETED [REPLACEMENT ...]]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2611
)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2612
def debugobsolete(ui, repo, precursor=None, *successors, **opts):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2613
    """create arbitrary obsolete marker
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2614
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2615
    With no arguments, displays the list of obsolescence markers."""
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2616
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2617
    def parsenodeid(s):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2618
        try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2619
            # We do not use revsingle/revrange functions here to accept
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2620
            # arbitrary node identifiers, possibly not present in the
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2621
            # local repository.
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2622
            n = bin(s)
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  2623
            if len(n) != repo.nodeconstants.nodelen:
49248
63fd0282ad40 node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents: 49228
diff changeset
  2624
                raise ValueError
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2625
            return n
49248
63fd0282ad40 node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents: 49228
diff changeset
  2626
        except ValueError:
45874
1a72e4839795 errors: raise InputError in `hg debugobsolete`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45865
diff changeset
  2627
            raise error.InputError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2628
                b'changeset references must be full hexadecimal '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2629
                b'node identifiers'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2630
            )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2631
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2632
    if opts.get('delete'):
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2633
        indices = []
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2634
        for v in opts.get('delete'):
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2635
            try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2636
                indices.append(int(v))
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2637
            except ValueError:
45874
1a72e4839795 errors: raise InputError in `hg debugobsolete`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45865
diff changeset
  2638
                raise error.InputError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2639
                    _(b'invalid index value: %r') % v,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2640
                    hint=_(b'use integers for indices'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2641
                )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2642
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2643
        if repo.currenttransaction():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2644
            raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  2645
                _(b'cannot delete obsmarkers in the middle of transaction.')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2646
            )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2647
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2648
        with repo.lock():
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2649
            n = repair.deleteobsmarkers(repo.obsstore, indices)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2650
            ui.write(_(b'deleted %i obsolescence markers\n') % n)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2651
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2652
        return
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2653
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2654
    if precursor is not None:
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2655
        if opts['rev']:
45874
1a72e4839795 errors: raise InputError in `hg debugobsolete`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45865
diff changeset
  2656
            raise error.InputError(
1a72e4839795 errors: raise InputError in `hg debugobsolete`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45865
diff changeset
  2657
                b'cannot select revision when creating marker'
1a72e4839795 errors: raise InputError in `hg debugobsolete`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45865
diff changeset
  2658
            )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2659
        metadata = {}
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2660
        metadata[b'user'] = encoding.fromlocal(opts['user'] or ui.username())
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2661
        succs = tuple(parsenodeid(succ) for succ in successors)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2662
        l = repo.lock()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2663
        try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2664
            tr = repo.transaction(b'debugobsolete')
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2665
            try:
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2666
                date = opts.get('date')
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2667
                if date:
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36587
diff changeset
  2668
                    date = dateutil.parsedate(date)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2669
                else:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2670
                    date = None
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2671
                prec = parsenodeid(precursor)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2672
                parents = None
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2673
                if opts['record_parents']:
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2674
                    if prec not in repo.unfiltered():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2675
                        raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2676
                            b'cannot used --record-parents on '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2677
                            b'unknown changesets'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2678
                        )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2679
                    parents = repo.unfiltered()[prec].parents()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2680
                    parents = tuple(p.node() for p in parents)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2681
                repo.obsstore.create(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2682
                    tr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2683
                    prec,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2684
                    succs,
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2685
                    opts['flags'],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2686
                    parents=parents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2687
                    date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2688
                    metadata=metadata,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2689
                    ui=ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2690
                )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2691
                tr.close()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2692
            except ValueError as exc:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2693
                raise error.Abort(
46689
8408c3198ec1 debug: convert a few exceptions to bytes before wrapping in another error
Matt Harbison <matt_harbison@yahoo.com>
parents: 46237
diff changeset
  2694
                    _(b'bad obsmarker input: %s') % stringutil.forcebytestr(exc)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2695
                )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2696
            finally:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2697
                tr.release()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2698
        finally:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2699
            l.release()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2700
    else:
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2701
        if opts['rev']:
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2702
            revs = logcmdutil.revrange(repo, opts['rev'])
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2703
            nodes = [repo[r].node() for r in revs]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2704
            markers = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2705
                obsutil.getmarkers(
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2706
                    repo, nodes=nodes, exclusive=opts['exclusive']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2707
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2708
            )
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2709
            markers.sort(key=lambda x: x._data)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2710
        else:
33149
a14e2e7f7d1f obsutil: move 'getmarkers' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33148
diff changeset
  2711
            markers = obsutil.getmarkers(repo)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2712
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2713
        markerstoiter = markers
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2714
        isrelevant = lambda m: True
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2715
        if opts.get('rev') and opts.get('index'):
33149
a14e2e7f7d1f obsutil: move 'getmarkers' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33148
diff changeset
  2716
            markerstoiter = obsutil.getmarkers(repo)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2717
            markerset = set(markers)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2718
            isrelevant = lambda m: m in markerset
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2719
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2720
        fm = ui.formatter(b'debugobsolete', pycompat.byteskwargs(opts))
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2721
        for i, m in enumerate(markerstoiter):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2722
            if not isrelevant(m):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2723
                # marker can be irrelevant when we're iterating over a set
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2724
                # of markers (markerstoiter) which is bigger than the set
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2725
                # of markers we want to display (markers)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2726
                # this can happen if both --index and --rev options are
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2727
                # provided and thus we need to iterate over all of the markers
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2728
                # to get the correct indices, but only display the ones that
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2729
                # are relevant to --rev value
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2730
                continue
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2731
            fm.startitem()
50958
55c28ffadb14 debugobsolete: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50957
diff changeset
  2732
            ind = i if opts.get('index') else None
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2733
            cmdutil.showmarker(fm, m, index=ind)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2734
        fm.end()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  2735
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2736
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2737
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2738
    b'debugp1copies',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2739
    [(b'r', b'rev', b'', _(b'revision to debug'), _(b'REV'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2740
    _(b'[-r REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2741
)
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2742
def debugp1copies(ui, repo, **opts):
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2743
    """dump copy information compared to p1"""
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2744
50959
91c32fccd282 debugp1copies: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50958
diff changeset
  2745
    ctx = scmutil.revsingle(repo, opts.get('rev'), default=None)
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2746
    for dst, src in ctx.p1copies().items():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2747
        ui.write(b'%s -> %s\n' % (src, dst))
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2748
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2749
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2750
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2751
    b'debugp2copies',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2752
    [(b'r', b'rev', b'', _(b'revision to debug'), _(b'REV'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2753
    _(b'[-r REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2754
)
49281
223d55086d7c cleanup: rename some functions to avoid redefinitions
Manuel Jacob <me@manueljacob.de>
parents: 49253
diff changeset
  2755
def debugp2copies(ui, repo, **opts):
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2756
    """dump copy information compared to p2"""
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2757
50960
1e2be2c9a74d debugp2copies: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50959
diff changeset
  2758
    ctx = scmutil.revsingle(repo, opts.get('rev'), default=None)
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2759
    for dst, src in ctx.p2copies().items():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2760
        ui.write(b'%s -> %s\n' % (src, dst))
41755
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41749
diff changeset
  2761
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2762
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2763
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2764
    b'debugpathcomplete',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2765
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2766
        (b'f', b'full', None, _(b'complete an entire path')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2767
        (b'n', b'normal', None, _(b'show only normal files')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2768
        (b'a', b'added', None, _(b'show only added files')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2769
        (b'r', b'removed', None, _(b'show only removed files')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2770
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2771
    _(b'FILESPEC...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2772
)
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2773
def debugpathcomplete(ui, repo, *specs, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  2774
    """complete part or all of a tracked path
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2775
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2776
    This command supports shells that offer path name completion. It
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2777
    currently completes only files already known to the dirstate.
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2778
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2779
    Completion extends only to the next path segment unless
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  2780
    --full is specified, in which case entire paths are used."""
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2781
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2782
    def complete(path, acceptable):
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2783
        dirstate = repo.dirstate
39818
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 39760
diff changeset
  2784
        spec = os.path.normpath(os.path.join(encoding.getcwd(), path))
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2785
        rootdir = repo.root + pycompat.ossep
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2786
        if spec != repo.root and not spec.startswith(rootdir):
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2787
            return [], []
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2788
        if os.path.isdir(spec):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2789
            spec += b'/'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2790
        spec = spec[len(rootdir) :]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2791
        fixpaths = pycompat.ossep != b'/'
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2792
        if fixpaths:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2793
            spec = spec.replace(pycompat.ossep, b'/')
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2794
        speclen = len(spec)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2795
        fullpaths = opts['full']
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2796
        files, dirs = set(), set()
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2797
        adddir, addfile = dirs.add, files.add
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
  2798
        for f, st in dirstate.items():
47544
5363610f61ef dirstate-item: use the `state` property in debugpathcomplete
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47438
diff changeset
  2799
            if f.startswith(spec) and st.state in acceptable:
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2800
                if fixpaths:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2801
                    f = f.replace(b'/', pycompat.ossep)
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2802
                if fullpaths:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2803
                    addfile(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2804
                    continue
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2805
                s = f.find(pycompat.ossep, speclen)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2806
                if s >= 0:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2807
                    adddir(f[:s])
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2808
                else:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2809
                    addfile(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2810
        return files, dirs
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2811
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2812
    acceptable = b''
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2813
    if opts['normal']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2814
        acceptable += b'nm'
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2815
    if opts['added']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2816
        acceptable += b'a'
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  2817
    if opts['removed']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2818
        acceptable += b'r'
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2819
    cwd = repo.getcwd()
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2820
    if not specs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2821
        specs = [b'.']
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2822
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2823
    files, dirs = set(), set()
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2824
    for spec in specs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2825
        f, d = complete(spec, acceptable or b'nmar')
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2826
        files.update(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2827
        dirs.update(d)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2828
    files.update(dirs)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2829
    ui.write(b'\n'.join(repo.pathto(p, cwd) for p in sorted(files)))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2830
    ui.write(b'\n')
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  2831
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2832
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2833
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2834
    b'debugpathcopies',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2835
    cmdutil.walkopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2836
    b'hg debugpathcopies REV1 REV2 [FILE]',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2837
    inferrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2838
)
41515
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
  2839
def debugpathcopies(ui, repo, rev1, rev2, *pats, **opts):
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
  2840
    """show copies between two revisions"""
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
  2841
    ctx1 = scmutil.revsingle(repo, rev1)
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
  2842
    ctx2 = scmutil.revsingle(repo, rev2)
7dc160a57025 debugcommands: add a debugpathcopies command
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
  2843
    m = scmutil.match(ctx1, pats, opts)
41749
f96988680afe debugpathcopies: sort output so it's deterministic
Martin von Zweigbergk <martinvonz@google.com>
parents: 41691
diff changeset
  2844
    for dst, src in sorted(copies.pathcopies(ctx1, ctx2, m).items()):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2845
        ui.write(b'%s -> %s\n' % (src, dst))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2846
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2847
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2848
@command(b'debugpeer', [], _(b'PATH'), norepo=True)
35929
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2849
def debugpeer(ui, path):
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2850
    """establish a connection to a peer repository"""
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2851
    # Always enable peer request logging. Requires --debug to display
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2852
    # though.
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2853
    overrides = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2854
        (b'devel', b'debug.peer-request'): True,
35929
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2855
    }
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2856
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2857
    with ui.configoverride(overrides):
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2858
        peer = hg.peer(ui, {}, path)
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2859
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2860
        try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2861
            local = peer.local() is not None
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2862
            canpush = peer.canpush()
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2863
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2864
            ui.write(_(b'url: %s\n') % peer.url())
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2865
            ui.write(_(b'local: %s\n') % (_(b'yes') if local else _(b'no')))
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2866
            ui.write(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2867
                _(b'pushable: %s\n') % (_(b'yes') if canpush else _(b'no'))
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2868
            )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2869
        finally:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2870
            peer.close()
35929
5f029d03cf71 debugcommands: introduce debugpeer command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35902
diff changeset
  2871
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2872
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2873
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2874
    b'debugpickmergetool',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2875
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2876
        (b'r', b'rev', b'', _(b'check for files in this revision'), _(b'REV')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2877
        (b'', b'changedelete', None, _(b'emulate merging change and delete')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2878
    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2879
    + cmdutil.walkopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2880
    + cmdutil.mergetoolopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2881
    _(b'[PATTERN]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2882
    inferrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2883
)
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2884
def debugpickmergetool(ui, repo, *pats, **opts):
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2885
    """examine which merge tool is chosen for specified file
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2886
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2887
    As described in :hg:`help merge-tools`, Mercurial examines
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2888
    configurations below in this order to decide which merge tool is
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2889
    chosen for specified file.
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2890
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2891
    1. ``--tool`` option
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2892
    2. ``HGMERGE`` environment variable
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2893
    3. configurations in ``merge-patterns`` section
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2894
    4. configuration of ``ui.merge``
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2895
    5. configurations in ``merge-tools`` section
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2896
    6. ``hgmerge`` tool (for historical reason only)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2897
    7. default tool for fallback (``:merge`` or ``:prompt``)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2898
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2899
    This command writes out examination result in the style below::
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2900
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2901
        FILE = MERGETOOL
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2902
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2903
    By default, all files known in the first parent context of the
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2904
    working directory are examined. Use file patterns and/or -I/-X
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2905
    options to limit target files. -r/--rev is also useful to examine
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2906
    files in another context without actual updating to it.
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2907
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2908
    With --debug, this command shows warning messages while matching
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2909
    against ``merge-patterns`` and so on, too. It is recommended to
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2910
    use this option with explicit file patterns and/or -I/-X options,
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2911
    because this option increases amount of output per file according
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2912
    to configurations in hgrc.
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2913
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2914
    With -v/--verbose, this command shows configurations below at
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2915
    first (only if specified).
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2916
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2917
    - ``--tool`` option
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2918
    - ``HGMERGE`` environment variable
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2919
    - configuration of ``ui.merge``
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2920
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2921
    If merge tool is chosen before matching against
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2922
    ``merge-patterns``, this command can't show any helpful
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2923
    information, even with --debug. In such case, information above is
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2924
    useful to know why a merge tool is chosen.
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2925
    """
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2926
    overrides = {}
50961
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2927
    if opts['tool']:
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2928
        overrides[(b'ui', b'forcemerge')] = opts['tool']
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2929
        ui.notenoi18n(b'with --tool %r\n' % (pycompat.bytestr(opts['tool'])))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2930
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2931
    with ui.configoverride(overrides, b'debugmergepatterns'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2932
        hgmerge = encoding.environ.get(b"HGMERGE")
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2933
        if hgmerge is not None:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  2934
            ui.notenoi18n(b'with HGMERGE=%r\n' % (pycompat.bytestr(hgmerge)))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2935
        uimerge = ui.config(b"ui", b"merge")
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2936
        if uimerge:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  2937
            ui.notenoi18n(b'with ui.merge=%r\n' % (pycompat.bytestr(uimerge)))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2938
50961
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2939
        ctx = scmutil.revsingle(repo, opts.get('rev'))
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2940
        m = scmutil.match(ctx, pats, pycompat.byteskwargs(opts))
206d7fad2a1c debugpickmergetool: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50960
diff changeset
  2941
        changedelete = opts['changedelete']
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2942
        for path in ctx.walk(m):
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  2943
            fctx = ctx[path]
47437
7a430116f639 ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents: 47351
diff changeset
  2944
            with ui.silent(
7a430116f639 ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents: 47351
diff changeset
  2945
                error=True
7a430116f639 ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents: 47351
diff changeset
  2946
            ) if not ui.debugflag else util.nullcontextmanager():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2947
                tool, toolpath = filemerge._picktool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2948
                    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2949
                    ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2950
                    path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2951
                    fctx.isbinary(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2952
                    b'l' in fctx.flags(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2953
                    changedelete,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2954
                )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2955
            ui.write(b'%s = %s\n' % (path, tool))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2956
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2957
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2958
@command(b'debugpushkey', [], _(b'REPO NAMESPACE [KEY OLD NEW]'), norepo=True)
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2959
def debugpushkey(ui, repopath, namespace, *keyinfo, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  2960
    """access the pushkey key/value protocol
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2961
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2962
    With two args, list the keys in the given namespace.
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2963
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2964
    With five args, set a key to new if it currently is set to old.
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2965
    Reports success or failure.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  2966
    """
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2967
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2968
    target = hg.peer(ui, {}, repopath)
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2969
    try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2970
        if keyinfo:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2971
            key, old, new = keyinfo
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2972
            with target.commandexecutor() as e:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2973
                r = e.callcommand(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2974
                    b'pushkey',
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2975
                    {
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2976
                        b'namespace': namespace,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2977
                        b'key': key,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2978
                        b'old': old,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2979
                        b'new': new,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2980
                    },
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2981
                ).result()
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2982
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2983
            ui.status(pycompat.bytestr(r) + b'\n')
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2984
            return not r
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2985
        else:
48921
c9774f5fa729 debugcommands: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
  2986
            for k, v in sorted(target.listkeys(namespace).items()):
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2987
                ui.write(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2988
                    b"%s\t%s\n"
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2989
                    % (stringutil.escapestr(k), stringutil.escapestr(v))
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2990
                )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2991
    finally:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  2992
        target.close()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  2993
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  2994
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  2995
@command(b'debugpvec', [], _(b'A B'))
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  2996
def debugpvec(ui, repo, a, b=None):
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  2997
    ca = scmutil.revsingle(repo, a)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  2998
    cb = scmutil.revsingle(repo, b)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  2999
    pa = pvec.ctxpvec(ca)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  3000
    pb = pvec.ctxpvec(cb)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  3001
    if pa == pb:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3002
        rel = b"="
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  3003
    elif pa > pb:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3004
        rel = b">"
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  3005
    elif pa < pb:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3006
        rel = b"<"
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  3007
    elif pa | pb:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3008
        rel = b"|"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3009
    ui.write(_(b"a: %s\n") % pa)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3010
    ui.write(_(b"b: %s\n") % pb)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3011
    ui.write(_(b"depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3012
    ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3013
        _(b"delta: %d hdist: %d distance: %d relation: %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3014
        % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3015
            abs(pa._depth - pb._depth),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3016
            pvec._hamming(pa._vec, pb._vec),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3017
            pa.distance(pb),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3018
            rel,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3019
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3020
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3021
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3022
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3023
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3024
    b'debugrebuilddirstate|debugrebuildstate',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3025
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3026
        (b'r', b'rev', b'', _(b'revision to rebuild to'), _(b'REV')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3027
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3028
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3029
            b'minimal',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3030
            None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3031
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3032
                b'only rebuild files that are inconsistent with '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3033
                b'the working copy parent'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3034
            ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3035
        ),
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3036
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3037
    _(b'[-r REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3038
)
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3039
def debugrebuilddirstate(ui, repo, rev, **opts):
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3040
    """rebuild the dirstate as it would look like for the given revision
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3041
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3042
    If no revision is specified the first current parent will be used.
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3043
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3044
    The dirstate will be set to the files of the given revision.
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3045
    The actual working directory content or existing dirstate
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3046
    information such as adds or removes is not considered.
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3047
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3048
    ``minimal`` will only rebuild the dirstate status for files that claim to be
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3049
    tracked but are not in the parent manifest, or that exist in the parent
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3050
    manifest but are not in the dirstate. It will not change adds, removes, or
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3051
    modified files that are in the working copy parent.
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3052
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3053
    One use of this command is to make the next :hg:`status` invocation
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3054
    check the actual file content.
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3055
    """
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3056
    ctx = scmutil.revsingle(repo, rev)
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3057
    with repo.wlock():
50000
1f28172cfce9 debugrebuilddirstate: double check that no transaction is open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49999
diff changeset
  3058
        if repo.currenttransaction() is not None:
1f28172cfce9 debugrebuilddirstate: double check that no transaction is open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49999
diff changeset
  3059
            msg = b'rebuild the dirstate outside of a transaction'
1f28172cfce9 debugrebuilddirstate: double check that no transaction is open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49999
diff changeset
  3060
            raise error.ProgrammingError(msg)
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3061
        dirstate = repo.dirstate
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3062
        changedfiles = None
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3063
        # See command doc for what minimal does.
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3064
        if opts.get('minimal'):
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3065
            manifestfiles = set(ctx.manifest().keys())
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3066
            dirstatefiles = set(dirstate)
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3067
            manifestonly = manifestfiles - dirstatefiles
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3068
            dsonly = dirstatefiles - manifestfiles
48101
78e66649cdb3 dirstate-item: use `added` in debugrebuilddirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48089
diff changeset
  3069
            dsnotadded = {f for f in dsonly if not dirstate.get_entry(f).added}
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3070
            changedfiles = manifestonly | dsnotadded
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3071
50113
dae8dda6f582 debugrebuildstate: wrap the operation in a `changing_parents` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50000
diff changeset
  3072
        with dirstate.changing_parents(repo):
dae8dda6f582 debugrebuildstate: wrap the operation in a `changing_parents` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50000
diff changeset
  3073
            dirstate.rebuild(ctx.node(), ctx.manifest(), changedfiles)
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  3074
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3075
47875
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3076
@command(
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3077
    b'debugrebuildfncache',
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3078
    [
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3079
        (
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3080
            b'',
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3081
            b'only-data',
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3082
            False,
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3083
            _(b'only look for wrong .d files (much faster)'),
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3084
        )
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3085
    ],
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3086
    b'',
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3087
)
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47817
diff changeset
  3088
def debugrebuildfncache(ui, repo, **opts):
30949
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  3089
    """rebuild the fncache file"""
50962
a0fcdcc53618 debugrebuildfncache: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50961
diff changeset
  3090
    repair.rebuildfncache(ui, repo, opts.get("only_data"))
30949
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  3091
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3092
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3093
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3094
    b'debugrename',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3095
    [(b'r', b'rev', b'', _(b'revision to debug'), _(b'REV'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3096
    _(b'[-r REV] [FILE]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3097
)
41690
ea72da71ad69 debugrename: don't require at least one path
Martin von Zweigbergk <martinvonz@google.com>
parents: 41671
diff changeset
  3098
def debugrename(ui, repo, *pats, **opts):
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3099
    """dump rename information"""
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3100
50963
7ef74fc79900 debugrename: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50962
diff changeset
  3101
    ctx = scmutil.revsingle(repo, opts.get('rev'))
7ef74fc79900 debugrename: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50962
diff changeset
  3102
    m = scmutil.match(ctx, pats, pycompat.byteskwargs(opts))
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3103
    for abs in ctx.walk(m):
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3104
        fctx = ctx[abs]
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3105
        o = fctx.filelog().renamed(fctx.filenode())
41659
ecf7f4ef52fb debugwalk: avoid match.rel() and use repo.pathto() instead
Martin von Zweigbergk <martinvonz@google.com>
parents: 41636
diff changeset
  3106
        rel = repo.pathto(abs)
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3107
        if o:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3108
            ui.write(_(b"%s renamed from %s:%s\n") % (rel, o[0], hex(o[1])))
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3109
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3110
            ui.write(_(b"%s not renamed\n") % rel)
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  3111
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3112
45107
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3113
@command(b'debugrequires|debugrequirements', [], b'')
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3114
def debugrequirements(ui, repo):
47062
f38bf44e077f black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents: 47061
diff changeset
  3115
    """print the current repo requirements"""
45107
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3116
    for r in sorted(repo.requirements):
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3117
        ui.write(b"%s\n" % r)
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3118
4a28f5e8408e debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45100
diff changeset
  3119
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3120
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3121
    b'debugrevlog',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3122
    cmdutil.debugrevlogopts + [(b'd', b'dump', False, _(b'dump index data'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3123
    _(b'-c|-m|FILE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3124
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3125
)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  3126
def debugrevlog(ui, repo, file_=None, **opts):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  3127
    """show data and statistics about a revlog"""
50964
8f25df137282 debugrevlog: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50963
diff changeset
  3128
    r = cmdutil.openrevlog(
8f25df137282 debugrevlog: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50963
diff changeset
  3129
        repo, b'debugrevlog', file_, pycompat.byteskwargs(opts)
8f25df137282 debugrevlog: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50963
diff changeset
  3130
    )
8f25df137282 debugrevlog: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50963
diff changeset
  3131
8f25df137282 debugrevlog: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50963
diff changeset
  3132
    if opts.get("dump"):
49659
7c0a383849a8 debug-revlog: move the --dump code in `revlogutils` module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49589
diff changeset
  3133
        revlog_debug.dump(ui, r)
42554
30033d56758f debugrevlog: fix average size computation for empty data (issue6167)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42145
diff changeset
  3134
    else:
49660
bd3b6f363fb9 debug-revlog: move the code in revlogutils module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49659
diff changeset
  3135
        revlog_debug.debug_revlog(ui, r)
bd3b6f363fb9 debug-revlog: move the code in revlogutils module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49659
diff changeset
  3136
    return 0
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3137
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3138
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3139
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3140
    b'debugrevlogindex',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3141
    cmdutil.debugrevlogopts
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3142
    + [(b'f', b'format', 0, _(b'revlog format'), _(b'FORMAT'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3143
    _(b'[-f FORMAT] -c|-m|FILE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3144
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3145
)
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3146
def debugrevlogindex(ui, repo, file_=None, **opts):
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3147
    """dump the contents of a revlog index"""
50965
56a966bc6b1a debugrevlogindex: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50964
diff changeset
  3148
    r = cmdutil.openrevlog(
56a966bc6b1a debugrevlogindex: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50964
diff changeset
  3149
        repo, b'debugrevlogindex', file_, pycompat.byteskwargs(opts)
56a966bc6b1a debugrevlogindex: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50964
diff changeset
  3150
    )
56a966bc6b1a debugrevlogindex: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50964
diff changeset
  3151
    format = opts.get('format', 0)
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3152
    if format not in (0, 1):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3153
        raise error.Abort(_(b"unknown format %d") % format)
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3154
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3155
    if ui.debugflag:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3156
        shortfn = hex
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3157
    else:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3158
        shortfn = short
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3159
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3160
    # There might not be anything in r, so have a sane default
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3161
    idlen = 12
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3162
    for i in r:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3163
        idlen = len(shortfn(r.node(i)))
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3164
        break
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3165
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3166
    if format == 0:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3167
        if ui.verbose:
43116
defabf63e969 debugcommands: add a few more writenoi18n()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
  3168
            ui.writenoi18n(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  3169
                b"   rev    offset  length linkrev %s %s p2\n"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3170
                % (b"nodeid".ljust(idlen), b"p1".ljust(idlen))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3171
            )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3172
        else:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3173
            ui.writenoi18n(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3174
                b"   rev linkrev %s %s p2\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3175
                % (b"nodeid".ljust(idlen), b"p1".ljust(idlen))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3176
            )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3177
    elif format == 1:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3178
        if ui.verbose:
43116
defabf63e969 debugcommands: add a few more writenoi18n()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
  3179
            ui.writenoi18n(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3180
                (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3181
                    b"   rev flag   offset   length     size   link     p1"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3182
                    b"     p2 %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3183
                )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3184
                % b"nodeid".rjust(idlen)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3185
            )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3186
        else:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3187
            ui.writenoi18n(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3188
                b"   rev flag     size   link     p1     p2 %s\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3189
                % b"nodeid".rjust(idlen)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3190
            )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3191
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3192
    for i in r:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3193
        node = r.node(i)
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3194
        if format == 0:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3195
            try:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3196
                pp = r.parents(node)
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3197
            except Exception:
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  3198
                pp = [repo.nullid, repo.nullid]
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3199
            if ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3200
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3201
                    b"% 6d % 9d % 7d % 7d %s %s %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3202
                    % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3203
                        i,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3204
                        r.start(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3205
                        r.length(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3206
                        r.linkrev(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3207
                        shortfn(node),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3208
                        shortfn(pp[0]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3209
                        shortfn(pp[1]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3210
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3211
                )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3212
            else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3213
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3214
                    b"% 6d % 7d %s %s %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3215
                    % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3216
                        i,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3217
                        r.linkrev(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3218
                        shortfn(node),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3219
                        shortfn(pp[0]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3220
                        shortfn(pp[1]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3221
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3222
                )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3223
        elif format == 1:
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3224
            pr = r.parentrevs(i)
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3225
            if ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3226
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3227
                    b"% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3228
                    % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3229
                        i,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3230
                        r.flags(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3231
                        r.start(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3232
                        r.length(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3233
                        r.rawsize(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3234
                        r.linkrev(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3235
                        pr[0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3236
                        pr[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3237
                        shortfn(node),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3238
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3239
                )
39282
828a45233036 debugcommands: introduce debugrevlogindex (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39281
diff changeset
  3240
            else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3241
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3242
                    b"% 6d %04x % 8d % 6d % 6d % 6d %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3243
                    % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3244
                        i,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3245
                        r.flags(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3246
                        r.rawsize(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3247
                        r.linkrev(i),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3248
                        pr[0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3249
                        pr[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3250
                        shortfn(node),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3251
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3252
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3253
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3254
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3255
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3256
    b'debugrevspec',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3257
    [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3258
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3259
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3260
            b'optimize',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3261
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3262
            _(b'print parsed tree after optimizing (DEPRECATED)'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3263
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3264
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3265
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3266
            b'show-revs',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3267
            True,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3268
            _(b'print list of result revisions (default)'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3269
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3270
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3271
            b's',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3272
            b'show-set',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3273
            None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3274
            _(b'print internal representation of result set'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3275
        ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3276
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3277
            b'p',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3278
            b'show-stage',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3279
            [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3280
            _(b'print parsed tree at the given stage'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3281
            _(b'NAME'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3282
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3283
        (b'', b'no-optimized', False, _(b'evaluate tree without optimization')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3284
        (b'', b'verify-optimized', False, _(b'verify optimized result')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3285
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3286
    b'REVSPEC',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3287
)
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3288
def debugrevspec(ui, repo, expr, **opts):
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3289
    """parse and apply a revision specification
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3290
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3291
    Use -p/--show-stage option to print the parsed tree at the given stages.
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3292
    Use -p all to print tree at every stage.
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3293
32797
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  3294
    Use --no-show-revs option with -s or -p to print only the set
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  3295
    representation or the parsed tree respectively.
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  3296
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3297
    Use --verify-optimized to compare the optimized result with the unoptimized
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3298
    one. Returns 1 if the optimized result differs.
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3299
    """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3300
    aliases = ui.configitems(b'revsetalias')
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3301
    stages = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3302
        (b'parsed', lambda tree: tree),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3303
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3304
            b'expanded',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3305
            lambda tree: revsetlang.expandaliases(tree, aliases, ui.warn),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3306
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3307
        (b'concatenated', revsetlang.foldconcat),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3308
        (b'analyzed', revsetlang.analyze),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3309
        (b'optimized', revsetlang.optimize),
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3310
    ]
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3311
    if opts['no_optimized']:
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3312
        stages = stages[:-1]
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3313
    if opts['verify_optimized'] and opts['no_optimized']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3314
        raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  3315
            _(b'cannot use --verify-optimized with --no-optimized')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3316
        )
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44433
diff changeset
  3317
    stagenames = {n for n, f in stages}
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3318
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3319
    showalways = set()
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3320
    showchanged = set()
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3321
    if ui.verbose and not opts['show_stage']:
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3322
        # show parsed tree by --verbose (deprecated)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3323
        showalways.add(b'parsed')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3324
        showchanged.update([b'expanded', b'concatenated'])
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3325
        if opts['optimize']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3326
            showalways.add(b'optimized')
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3327
    if opts['show_stage'] and opts['optimize']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3328
        raise error.Abort(_(b'cannot use --optimize with --show-stage'))
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3329
    if opts['show_stage'] == [b'all']:
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3330
        showalways.update(stagenames)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3331
    else:
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3332
        for n in opts['show_stage']:
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3333
            if n not in stagenames:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3334
                raise error.Abort(_(b'invalid stage name: %s') % n)
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3335
        showalways.update(opts['show_stage'])
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3336
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3337
    treebystage = {}
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3338
    printedtree = None
37350
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37322
diff changeset
  3339
    tree = revsetlang.parse(expr, lookup=revset.lookupfn(repo))
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3340
    for n, f in stages:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3341
        treebystage[n] = tree = f(tree)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3342
        if n in showalways or (n in showchanged and tree != printedtree):
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3343
            if opts['show_stage'] or n != b'parsed':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3344
                ui.write(b"* %s:\n" % n)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3345
            ui.write(revsetlang.prettyformat(tree), b"\n")
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3346
            printedtree = tree
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3347
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3348
    if opts['verify_optimized']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3349
        arevs = revset.makematcher(treebystage[b'analyzed'])(repo)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3350
        brevs = revset.makematcher(treebystage[b'optimized'])(repo)
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3351
        if opts['show_set'] or (opts['show_set'] is None and ui.verbose):
43094
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3352
            ui.writenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3353
                b"* analyzed set:\n", stringutil.prettyrepr(arevs), b"\n"
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3354
            )
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3355
            ui.writenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3356
                b"* optimized set:\n", stringutil.prettyrepr(brevs), b"\n"
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3357
            )
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3358
        arevs = list(arevs)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3359
        brevs = list(brevs)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3360
        if arevs == brevs:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3361
            return 0
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3362
        ui.writenoi18n(b'--- analyzed\n', label=b'diff.file_a')
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3363
        ui.writenoi18n(b'+++ optimized\n', label=b'diff.file_b')
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3364
        sm = difflib.SequenceMatcher(None, arevs, brevs)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3365
        for tag, alo, ahi, blo, bhi in sm.get_opcodes():
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3366
            if tag in ('delete', 'replace'):
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3367
                for c in arevs[alo:ahi]:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3368
                    ui.write(b'-%d\n' % c, label=b'diff.deleted')
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3369
            if tag in ('insert', 'replace'):
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3370
                for c in brevs[blo:bhi]:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3371
                    ui.write(b'+%d\n' % c, label=b'diff.inserted')
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3372
            if tag == 'equal':
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3373
                for c in arevs[alo:ahi]:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3374
                    ui.write(b' %d\n' % c)
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3375
        return 1
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3376
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3377
    func = revset.makematcher(tree)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3378
    revs = func(repo)
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3379
    if opts['show_set'] or (opts['show_set'] is None and ui.verbose):
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3380
        ui.writenoi18n(b"* set:\n", stringutil.prettyrepr(revs), b"\n")
50966
98d1117dc904 debugrevspec: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50965
diff changeset
  3381
    if not opts['show_revs']:
32797
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  3382
        return
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3383
    for c in revs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3384
        ui.write(b"%d\n" % c)
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  3385
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3386
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3387
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3388
    b'debugserve',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3389
    [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3390
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3391
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3392
            b'sshstdio',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3393
            False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3394
            _(b'run an SSH server bound to process handles'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3395
        ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3396
        (b'', b'logiofd', b'', _(b'file descriptor to log server I/O to')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3397
        (b'', b'logiofile', b'', _(b'file to log server I/O to')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3398
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3399
    b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3400
)
36527
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3401
def debugserve(ui, repo, **opts):
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3402
    """run a server with advanced settings
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3403
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3404
    This command is similar to :hg:`serve`. It exists partially as a
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3405
    workaround to the fact that ``hg serve --stdio`` must have specific
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3406
    arguments for security reasons.
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3407
    """
50967
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3408
    if not opts['sshstdio']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3409
        raise error.Abort(_(b'only --sshstdio is currently supported'))
36527
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3410
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3411
    logfh = None
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3412
50967
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3413
    if opts['logiofd'] and opts['logiofile']:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3414
        raise error.Abort(_(b'cannot use both --logiofd and --logiofile'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3415
50967
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3416
    if opts['logiofd']:
44123
52f8b07ad2f9 debugcommands: move away from line buffered output on binary stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44009
diff changeset
  3417
        # Ideally we would be line buffered. But line buffering in binary
52f8b07ad2f9 debugcommands: move away from line buffered output on binary stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44009
diff changeset
  3418
        # mode isn't supported and emits a warning in Python 3.8+. Disabling
52f8b07ad2f9 debugcommands: move away from line buffered output on binary stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44009
diff changeset
  3419
        # buffering could have performance impacts. But since this isn't
52f8b07ad2f9 debugcommands: move away from line buffered output on binary stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44009
diff changeset
  3420
        # performance critical code, it should be fine.
38313
275cc461b854 debugcommands: work around logiofd being a pipe and unseekable
Augie Fackler <augie@google.com>
parents: 38263
diff changeset
  3421
        try:
50967
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3422
            logfh = os.fdopen(int(opts['logiofd']), 'ab', 0)
38313
275cc461b854 debugcommands: work around logiofd being a pipe and unseekable
Augie Fackler <augie@google.com>
parents: 38263
diff changeset
  3423
        except OSError as e:
275cc461b854 debugcommands: work around logiofd being a pipe and unseekable
Augie Fackler <augie@google.com>
parents: 38263
diff changeset
  3424
            if e.errno != errno.ESPIPE:
275cc461b854 debugcommands: work around logiofd being a pipe and unseekable
Augie Fackler <augie@google.com>
parents: 38263
diff changeset
  3425
                raise
275cc461b854 debugcommands: work around logiofd being a pipe and unseekable
Augie Fackler <augie@google.com>
parents: 38263
diff changeset
  3426
            # can't seek a pipe, so `ab` mode fails on py3
50967
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3427
            logfh = os.fdopen(int(opts['logiofd']), 'wb', 0)
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3428
    elif opts['logiofile']:
36f116820853 debugserve: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50966
diff changeset
  3429
        logfh = open(opts['logiofile'], b'ab', 0)
36527
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3430
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3431
    s = wireprotoserver.sshserver(ui, repo, logfh=logfh)
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3432
    s.serve_forever()
44dc34b8d17b debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36492
diff changeset
  3433
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3434
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3435
@command(b'debugsetparents', [], _(b'REV1 [REV2]'))
30953
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3436
def debugsetparents(ui, repo, rev1, rev2=None):
46201
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3437
    """manually set the parents of the current working directory (DANGEROUS)
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3438
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3439
    This command is not what you are looking for and should not be used. Using
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3440
    this command will most certainly results in slight corruption of the file
51377
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3441
    level histories within your repository. DO NOT USE THIS COMMAND.
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3442
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3443
    The command updates the p1 and p2 fields in the dirstate, without touching
46201
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3444
    anything else. This useful for writing repository conversion tools, but
b986e3342827 debugsetparents: add various warning in the help message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46112
diff changeset
  3445
    should be used with extreme care. For example, neither the working
51377
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3446
    directory nor the dirstate is updated, so file statuses may be incorrect
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3447
    after running this command. Use it only if you are one of the few people who
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3448
    deeply understands both conversion tools and file level histories. If you are
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3449
    reading this help, you are not one of those people (most of them sailed west
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3450
    from Mithlond anyway).
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3451
39f349391898 debugsetparents: fix Marmoutian docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 51232
diff changeset
  3452
    So, one more time, DO NOT USE THIS COMMAND.
30953
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3453
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3454
    Returns 0 on success.
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3455
    """
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3456
37143
8bac14ce5778 debugsetparents: avoid using "r1/r2" variable names for nodeids
Martin von Zweigbergk <martinvonz@google.com>
parents: 37120
diff changeset
  3457
    node1 = scmutil.revsingle(repo, rev1).node()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3458
    node2 = scmutil.revsingle(repo, rev2, b'null').node()
30953
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3459
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3460
    with repo.wlock():
37143
8bac14ce5778 debugsetparents: avoid using "r1/r2" variable names for nodeids
Martin von Zweigbergk <martinvonz@google.com>
parents: 37120
diff changeset
  3461
        repo.setparents(node1, node2)
30953
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  3462
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3463
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3464
@command(b'debugsidedata', cmdutil.debugrevlogopts, _(b'-c|-m|FILE REV'))
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3465
def debugsidedata(ui, repo, file_, rev=None, **opts):
43136
ba5b062a1388 debugsidedata: small doc improvement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
  3466
    """dump the side data for a cl/manifest/file revision
ba5b062a1388 debugsidedata: small doc improvement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
  3467
ba5b062a1388 debugsidedata: small doc improvement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
  3468
    Use --verbose to dump the sidedata content."""
50968
e6ae6573b400 debugsidedata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50967
diff changeset
  3469
    if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3470
        if rev is not None:
50547
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  3471
            raise error.InputError(
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  3472
                _(b'cannot specify a revision with other arguments')
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  3473
            )
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3474
        file_, rev = None, file_
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3475
    elif rev is None:
50547
003418163195 debug: slightly improve wording on the InputErrors from the previous patch
Anton Shestakov <av6@dwimlabs.net>
parents: 50546
diff changeset
  3476
        raise error.InputError(_(b'please specify a revision'))
50968
e6ae6573b400 debugsidedata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50967
diff changeset
  3477
    r = cmdutil.openstorage(
e6ae6573b400 debugsidedata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50967
diff changeset
  3478
        repo, b'debugdata', file_, pycompat.byteskwargs(opts)
e6ae6573b400 debugsidedata: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50967
diff changeset
  3479
    )
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3480
    r = getattr(r, '_revlog', r)
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3481
    try:
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3482
        sidedata = r.sidedata(r.lookup(rev))
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3483
    except KeyError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3484
        raise error.Abort(_(b'invalid revision identifier %s') % rev)
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3485
    if sidedata:
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3486
        sidedata = list(sidedata.items())
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3487
        sidedata.sort()
43116
defabf63e969 debugcommands: add a few more writenoi18n()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
  3488
        ui.writenoi18n(b'%d sidedata entries\n' % len(sidedata))
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3489
        for key, value in sidedata:
43116
defabf63e969 debugcommands: add a few more writenoi18n()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
  3490
            ui.writenoi18n(b' entry-%04o size %d\n' % (key, len(value)))
43041
559ac8411f12 sidedata: add a debugsidedata command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42926
diff changeset
  3491
            if ui.verbose:
43116
defabf63e969 debugcommands: add a few more writenoi18n()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
  3492
                ui.writenoi18n(b'  %s\n' % stringutil.pprint(value))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3493
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3494
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3495
@command(b'debugssl', [], b'[SOURCE]', optionalrepo=True)
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3496
def debugssl(ui, repo, source=None, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  3497
    """test a secure connection to a server
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3498
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3499
    This builds the certificate chain for the server on Windows, installing the
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3500
    missing intermediates and trusted root via Windows Update if necessary.  It
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3501
    does nothing on other platforms.
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3502
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3503
    If SOURCE is omitted, the 'default' path will be used.  If a URL is given,
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3504
    that server is used. See :hg:`help urls` for more information.
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3505
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3506
    If the update succeeds, retry the original operation.  Otherwise, the cause
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3507
    of the SSL error is likely another issue.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  3508
    """
34645
75979c8d4572 codemod: use pycompat.iswindows
Jun Wu <quark@fb.com>
parents: 34320
diff changeset
  3509
    if not pycompat.iswindows:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3510
        raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  3511
            _(b'certificate chain building is only possible on Windows')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3512
        )
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3513
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3514
    if not source:
34027
3c3066367d72 debugssl: allow a URL to be specified without a local repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 33553
diff changeset
  3515
        if not repo:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3516
            raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3517
                _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3518
                    b"there is no Mercurial repository here, and no "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3519
                    b"server specified"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3520
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3521
            )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3522
        source = b"default"
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3523
49727
aae6b10d93f2 path: pass `path` to `peer` in `hg debugssl`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49726
diff changeset
  3524
    path = urlutil.get_unique_pull_path_obj(b'debugssl', ui, source)
aae6b10d93f2 path: pass `path` to `peer` in `hg debugssl`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49726
diff changeset
  3525
    url = path.url
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3526
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3527
    defaultport = {b'https': 443, b'ssh': 22}
35425
88572b7e50fd debugssl: convert port number to int (issue5757)
Yuya Nishihara <yuya@tcha.org>
parents: 34645
diff changeset
  3528
    if url.scheme in defaultport:
88572b7e50fd debugssl: convert port number to int (issue5757)
Yuya Nishihara <yuya@tcha.org>
parents: 34645
diff changeset
  3529
        try:
88572b7e50fd debugssl: convert port number to int (issue5757)
Yuya Nishihara <yuya@tcha.org>
parents: 34645
diff changeset
  3530
            addr = (url.host, int(url.port or defaultport[url.scheme]))
88572b7e50fd debugssl: convert port number to int (issue5757)
Yuya Nishihara <yuya@tcha.org>
parents: 34645
diff changeset
  3531
        except ValueError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3532
            raise error.Abort(_(b"malformed port number in URL"))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3533
    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3534
        raise error.Abort(_(b"only https and ssh connections are supported"))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3535
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3536
    from . import win32
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3537
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3538
    s = ssl.wrap_socket(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3539
        socket.socket(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3540
        ssl_version=ssl.PROTOCOL_TLS,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3541
        cert_reqs=ssl.CERT_NONE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3542
        ca_certs=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3543
    )
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3544
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3545
    try:
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3546
        s.connect(addr)
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3547
        cert = s.getpeercert(True)
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3548
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3549
        ui.status(_(b'checking the certificate chain for %s\n') % url.host)
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3550
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3551
        complete = win32.checkcertificatechain(cert, build=False)
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3552
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3553
        if not complete:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3554
            ui.status(_(b'certificate chain is incomplete, updating... '))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3555
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3556
            if not win32.checkcertificatechain(cert):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3557
                ui.status(_(b'failed.\n'))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3558
            else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3559
                ui.status(_(b'done.\n'))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3560
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3561
            ui.status(_(b'full certificate chain is available\n'))
33493
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3562
    finally:
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3563
        s.close()
9a9f95214f46 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com>
parents: 33438
diff changeset
  3564
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3565
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3566
@command(
50392
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3567
    b'debug::stable-tail-sort',
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3568
    [
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3569
        (
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3570
            b'T',
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3571
            b'template',
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3572
            b'{rev}\n',
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3573
            _(b'display with template'),
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3574
            _(b'TEMPLATE'),
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3575
        ),
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3576
    ],
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3577
    b'REV',
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3578
)
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3579
def debug_stable_tail_sort(ui, repo, revspec, template, **opts):
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3580
    """display the stable-tail sort of the ancestors of a given node"""
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3581
    rev = logcmdutil.revsingle(repo, revspec).rev()
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3582
    cl = repo.changelog
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3583
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3584
    displayer = logcmdutil.maketemplater(ui, repo, template)
50525
1a4f54574e3d stabletailgraph: clarify naiveness of current implementation
pacien <pacien.trangirard@pacien.net>
parents: 50509
diff changeset
  3585
    sorted_revs = stabletailsort._stable_tail_sort_naive(cl, rev)
50392
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3586
    for ancestor_rev in sorted_revs:
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3587
        displayer.show(repo[ancestor_rev])
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3588
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3589
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50388
diff changeset
  3590
@command(
50528
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3591
    b'debug::stable-tail-sort-leaps',
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3592
    [
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3593
        (
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3594
            b'T',
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3595
            b'template',
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3596
            b'{rev}',
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3597
            _(b'display with template'),
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3598
            _(b'TEMPLATE'),
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3599
        ),
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3600
        (b's', b'specific', False, _(b'restrict to specific leaps')),
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3601
    ],
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3602
    b'REV',
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3603
)
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3604
def debug_stable_tail_sort_leaps(ui, repo, rspec, template, specific, **opts):
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3605
    """display the leaps in the stable-tail sort of a node, one per line"""
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3606
    rev = logcmdutil.revsingle(repo, rspec).rev()
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3607
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3608
    if specific:
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3609
        get_leaps = stabletailsort._find_specific_leaps_naive
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3610
    else:
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3611
        get_leaps = stabletailsort._find_all_leaps_naive
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3612
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3613
    displayer = logcmdutil.maketemplater(ui, repo, template)
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3614
    for source, target in get_leaps(repo.changelog, rev):
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3615
        displayer.show(repo[source])
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3616
        displayer.show(repo[target])
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3617
        ui.write(b'\n')
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3618
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3619
8fb3e942473a stabletailgraph: naive version of leap computation
pacien <pacien.trangirard@pacien.net>
parents: 50525
diff changeset
  3620
@command(
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3621
    b"debugbackupbundle",
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3622
    [
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3623
        (
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3624
            b"",
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3625
            b"recover",
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3626
            b"",
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3627
            b"brings the specified changeset back into the repository",
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3628
        )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3629
    ]
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3630
    + cmdutil.logopts,
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3631
    _(b"hg debugbackupbundle [--recover HASH]"),
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3632
)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3633
def debugbackupbundle(ui, repo, *pats, **opts):
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3634
    """lists the changesets available in backup bundles
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3635
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3636
    Without any arguments, this command prints a list of the changesets in each
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3637
    backup bundle.
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3638
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3639
    --recover takes a changeset hash and unbundles the first bundle that
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3640
    contains that hash, which puts that changeset back in your repository.
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3641
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3642
    --verbose will print the entire commit message and the bundle path for that
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3643
    backup.
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3644
    """
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3645
    backups = list(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3646
        filter(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3647
            os.path.isfile, glob.glob(repo.vfs.join(b"strip-backup") + b"/*.hg")
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3648
        )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3649
    )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3650
    backups.sort(key=lambda x: os.path.getmtime(x), reverse=True)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3651
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3652
    opts["bundle"] = b""
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3653
    opts["force"] = None
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3654
    limit = logcmdutil.getlimit(pycompat.byteskwargs(opts))
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3655
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3656
    def display(other, chlist, displayer):
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3657
        if opts.get("newest_first"):
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3658
            chlist.reverse()
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3659
        count = 0
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3660
        for n in chlist:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3661
            if limit is not None and count >= limit:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3662
                break
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  3663
            parents = [
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  3664
                True for p in other.changelog.parents(n) if p != repo.nullid
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46961
diff changeset
  3665
            ]
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3666
            if opts.get("no_merges") and len(parents) == 2:
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3667
                continue
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3668
            count += 1
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3669
            displayer.show(other[n])
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3670
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3671
    recovernode = opts.get("recover")
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3672
    if recovernode:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3673
        if scmutil.isrevsymbol(repo, recovernode):
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3674
            ui.warn(_(b"%s already exists in the repo\n") % recovernode)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3675
            return
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3676
    elif backups:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3677
        msg = _(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3678
            b"Recover changesets using: hg debugbackupbundle --recover "
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3679
            b"<changeset hash>\n\nAvailable backup changesets:"
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3680
        )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3681
        ui.status(msg, label=b"status.removed")
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3682
    else:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3683
        ui.status(_(b"no backup changesets found\n"))
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3684
        return
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3685
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3686
    for backup in backups:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3687
        # Much of this is copied from the hg incoming logic
46961
d7b36a4e03de debugbackupbundle: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46960
diff changeset
  3688
        source = os.path.relpath(backup, encoding.getcwd())
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3689
        path = urlutil.get_unique_pull_path_obj(
46961
d7b36a4e03de debugbackupbundle: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46960
diff changeset
  3690
            b'debugbackupbundle',
d7b36a4e03de debugbackupbundle: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46960
diff changeset
  3691
            ui,
d7b36a4e03de debugbackupbundle: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46960
diff changeset
  3692
            source,
d7b36a4e03de debugbackupbundle: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46960
diff changeset
  3693
        )
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3694
        try:
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3695
            other = hg.peer(repo, pycompat.byteskwargs(opts), path)
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3696
        except error.LookupError as ex:
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3697
            msg = _(b"\nwarning: unable to open bundle %s") % path.loc
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3698
            hint = _(b"\n(missing parent rev %s)\n") % short(ex.name)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3699
            ui.warn(msg, hint=hint)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3700
            continue
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3701
        branches = (path.branch, opts.get('branch', []))
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3702
        revs, checkout = hg.addbranchrevs(
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3703
            repo, other, branches, opts.get("rev")
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3704
        )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3705
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3706
        if revs:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3707
            revs = [other.lookup(rev) for rev in revs]
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3708
47438
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3709
        with ui.silent():
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3710
            try:
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3711
                other, chlist, cleanupfn = bundlerepo.getremotechanges(
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3712
                    ui, repo, other, revs, opts["bundle"], opts["force"]
47438
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3713
                )
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3714
            except error.LookupError:
1be9bf3669cb debugbackupbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
  3715
                continue
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3716
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3717
        try:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3718
            if not chlist:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3719
                continue
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3720
            if recovernode:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3721
                with repo.lock(), repo.transaction(b"unbundle") as tr:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3722
                    if scmutil.isrevsymbol(other, recovernode):
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3723
                        ui.status(_(b"Unbundling %s\n") % (recovernode))
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3724
                        f = hg.openpath(ui, path.loc)
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3725
                        gen = exchange.readbundle(ui, f, path.loc)
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3726
                        if isinstance(gen, bundle2.unbundle20):
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3727
                            bundle2.applybundle(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3728
                                repo,
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3729
                                gen,
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3730
                                tr,
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3731
                                source=b"unbundle",
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3732
                                url=b"bundle:" + path.loc,
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3733
                            )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3734
                        else:
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3735
                            gen.apply(repo, b"unbundle", b"bundle:" + path.loc)
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3736
                        break
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3737
            else:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3738
                backupdate = encoding.strtolocal(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3739
                    time.strftime(
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3740
                        "%a %H:%M, %Y-%m-%d",
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3741
                        time.localtime(os.path.getmtime(path.loc)),
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3742
                    )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3743
                )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3744
                ui.status(b"\n%s\n" % (backupdate.ljust(50)))
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3745
                if ui.verbose:
49728
5177be2b4387 path: pass `path` to `peer` in `hg debugbackupbundle`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49727
diff changeset
  3746
                    ui.status(b"%s%s\n" % (b"bundle:".ljust(13), path.loc))
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3747
                else:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3748
                    opts[
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3749
                        "template"
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3750
                    ] = b"{label('status.modified', node|short)} {desc|firstline}\n"
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3751
                displayer = logcmdutil.changesetdisplayer(
50969
b28f794fe10a debugbackupbundle: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50968
diff changeset
  3752
                    ui, other, pycompat.byteskwargs(opts), False
44433
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3753
                )
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3754
                display(other, chlist, displayer)
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3755
                displayer.close()
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3756
        finally:
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3757
            cleanupfn()
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3758
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3759
f82d2d4e71db debugbackupbundle: introduce command to interact with strip backups
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44396
diff changeset
  3760
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3761
    b'debugsub',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3762
    [(b'r', b'rev', b'', _(b'revision to check'), _(b'REV'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3763
    _(b'[-r REV] [REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3764
)
30955
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  3765
def debugsub(ui, repo, rev=None):
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  3766
    ctx = scmutil.revsingle(repo, rev, None)
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  3767
    for k, v in sorted(ctx.substate.items()):
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3768
        ui.writenoi18n(b'path %s\n' % k)
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3769
        ui.writenoi18n(b' source   %s\n' % v[0])
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3770
        ui.writenoi18n(b' revision %s\n' % v[1])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3771
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3772
49944
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3773
@command(
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3774
    b'debugshell',
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3775
    [
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3776
        (
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3777
            b'c',
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3778
            b'command',
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3779
            b'',
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3780
            _(b'program passed in as a string'),
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3781
            _(b'COMMAND'),
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3782
        )
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3783
    ],
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3784
    _(b'[-c COMMAND]'),
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3785
    optionalrepo=True,
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3786
)
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3787
def debugshell(ui, repo, **opts):
46392
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3788
    """run an interactive Python interpreter
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3789
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3790
    The local namespace is provided with a reference to the ui and
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3791
    the repo instance (if available).
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3792
    """
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3793
    import code
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3794
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3795
    imported_objects = {
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3796
        'ui': ui,
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3797
        'repo': repo,
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3798
    }
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3799
49896
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3800
    # py2exe disables initialization of the site module, which is responsible
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3801
    # for arranging for ``quit()`` to exit the interpreter.  Manually initialize
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3802
    # the stuff that site normally does here, so that the interpreter can be
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3803
    # quit in a consistent manner, whether run with pyoxidizer, exewrapper.c,
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3804
    # py.exe, or py2exe.
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3805
    if getattr(sys, "frozen", None) == 'console_exe':
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3806
        try:
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3807
            import site
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3808
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3809
            site.setcopyright()
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3810
            site.sethelper()
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3811
            site.setquit()
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3812
        except ImportError:
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3813
            site = None  # Keep PyCharm happy
88b81dc2d82b debugshell: allow TortoiseHg builds to exit with the usual `quit()` command
Matt Harbison <matt_harbison@yahoo.com>
parents: 49826
diff changeset
  3814
49944
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3815
    command = opts.get('command')
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3816
    if command:
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3817
        compiled = code.compile_command(encoding.strfromlocal(command))
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3818
        code.InteractiveInterpreter(locals=imported_objects).runcode(compiled)
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3819
        return
8f76a41ee465 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents: 49896
diff changeset
  3820
46392
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3821
    code.interact(local=imported_objects)
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3822
f25c770c217b debugshell: add a simple command for starting an interactive shell
Joerg Sonnenberger <joerg@bec.de>
parents: 46237
diff changeset
  3823
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3824
@command(
49819
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3825
    b'debug-revlog-stats',
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3826
    [
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3827
        (b'c', b'changelog', None, _(b'Display changelog statistics')),
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3828
        (b'm', b'manifest', None, _(b'Display manifest statistics')),
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3829
        (b'f', b'filelogs', None, _(b'Display filelogs statistics')),
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3830
    ]
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3831
    + cmdutil.formatteropts,
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3832
)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3833
def debug_revlog_stats(ui, repo, **opts):
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3834
    """display statistics about revlogs in the store"""
50970
f04568add4ee debug_revlog_stats: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50969
diff changeset
  3835
    changelog = opts["changelog"]
f04568add4ee debug_revlog_stats: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50969
diff changeset
  3836
    manifest = opts["manifest"]
f04568add4ee debug_revlog_stats: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50969
diff changeset
  3837
    filelogs = opts["filelogs"]
49819
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3838
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3839
    if changelog is None and manifest is None and filelogs is None:
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3840
        changelog = True
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3841
        manifest = True
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3842
        filelogs = True
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3843
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3844
    repo = repo.unfiltered()
50970
f04568add4ee debug_revlog_stats: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50969
diff changeset
  3845
    fm = ui.formatter(b'debug-revlog-stats', pycompat.byteskwargs(opts))
49819
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3846
    revlog_debug.debug_revlog_stats(repo, fm, changelog, manifest, filelogs)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3847
    fm.end()
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3848
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3849
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents: 49759
diff changeset
  3850
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3851
    b'debugsuccessorssets',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3852
    [(b'', b'closest', False, _(b'return closest successors sets only'))],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3853
    _(b'[REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3854
)
33274
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  3855
def debugsuccessorssets(ui, repo, *revs, **opts):
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3856
    """show set of successors for revision
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3857
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3858
    A successors set of changeset A is a consistent group of revisions that
33274
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  3859
    succeed A. It contains non-obsolete changesets only unless closests
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  3860
    successors set is set.
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3861
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3862
    In most cases a changeset A has a single successors set containing a single
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3863
    successor (changeset A replaced by A').
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3864
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3865
    A changeset that is made obsolete with no successors are called "pruned".
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3866
    Such changesets have no successors sets at all.
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3867
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3868
    A changeset that has been "split" will have a successors set containing
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3869
    more than one successor.
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3870
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3871
    A changeset that has been rewritten in multiple different ways is called
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3872
    "divergent". Such changesets have multiple successor sets (each of which
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3873
    may also be split, i.e. have multiple successors).
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3874
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3875
    Results are displayed as follows::
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3876
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3877
        <rev1>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3878
            <successors-1A>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3879
        <rev2>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3880
            <successors-2A>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3881
            <successors-2B1> <successors-2B2> <successors-2B3>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3882
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3883
    Here rev2 has two possible (i.e. divergent) successors sets. The first
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3884
    holds one element, whereas the second holds three (i.e. the changeset has
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3885
    been split).
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3886
    """
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3887
    # passed to successorssets caching computation from one call to another
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3888
    cache = {}
36123
8eb13f5d5d3f py3: convert context to bytes instead of str
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35929
diff changeset
  3889
    ctx2str = bytes
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3890
    node2str = short
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48101
diff changeset
  3891
    for rev in logcmdutil.revrange(repo, revs):
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3892
        ctx = repo[rev]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3893
        ui.write(b'%s\n' % ctx2str(ctx))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3894
        for succsset in obsutil.successorssets(
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3895
            repo, ctx.node(), closest=opts['closest'], cache=cache
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3896
        ):
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3897
            if succsset:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3898
                ui.write(b'    ')
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3899
                ui.write(node2str(succsset[0]))
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3900
                for node in succsset[1:]:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3901
                    ui.write(b' ')
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3902
                    ui.write(node2str(node))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3903
            ui.write(b'\n')
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  3904
44306
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44290
diff changeset
  3905
44290
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3906
@command(b'debugtagscache', [])
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3907
def debugtagscache(ui, repo):
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3908
    """display the contents of .hg/cache/hgtagsfnodes1"""
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3909
    cache = tagsmod.hgtagsfnodescache(repo.unfiltered())
46655
e4e971abb6a3 debugtagscache: verify that filenode is correct
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46653
diff changeset
  3910
    flog = repo.file(b'.hgtags')
44290
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3911
    for r in repo:
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3912
        node = repo[r].node()
d8b53385b1bc tags: add a debug command to display .hg/cache/hgtagsfnodes1
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44145
diff changeset
  3913
        tagsnode = cache.getfnode(node, computemissing=False)
46495
5aac1a1a5beb tagcache: distinguish between invalid and missing entries
Matt Harbison <matt_harbison@yahoo.com>
parents: 46479
diff changeset
  3914
        if tagsnode:
5aac1a1a5beb tagcache: distinguish between invalid and missing entries
Matt Harbison <matt_harbison@yahoo.com>
parents: 46479
diff changeset
  3915
            tagsnodedisplay = hex(tagsnode)
46655
e4e971abb6a3 debugtagscache: verify that filenode is correct
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46653
diff changeset
  3916
            if not flog.hasnode(tagsnode):
e4e971abb6a3 debugtagscache: verify that filenode is correct
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46653
diff changeset
  3917
                tagsnodedisplay += b' (unknown node)'
46653
9306a16ca964 debugcommands: prevent using `is False`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46495
diff changeset
  3918
        elif tagsnode is None:
9306a16ca964 debugcommands: prevent using `is False`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46495
diff changeset
  3919
            tagsnodedisplay = b'missing'
9306a16ca964 debugcommands: prevent using `is False`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46495
diff changeset
  3920
        else:
46495
5aac1a1a5beb tagcache: distinguish between invalid and missing entries
Matt Harbison <matt_harbison@yahoo.com>
parents: 46479
diff changeset
  3921
            tagsnodedisplay = b'invalid'
5aac1a1a5beb tagcache: distinguish between invalid and missing entries
Matt Harbison <matt_harbison@yahoo.com>
parents: 46479
diff changeset
  3922
44350
e80da7a63264 tags: fix some type confusion exposed in python 3
Augie Fackler <augie@google.com>
parents: 44336
diff changeset
  3923
        ui.write(b'%d %s %s\n' % (r, hex(node), tagsnodedisplay))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3924
44306
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44290
diff changeset
  3925
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3926
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3927
    b'debugtemplate',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3928
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3929
        (b'r', b'rev', [], _(b'apply template on changesets'), _(b'REV')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3930
        (b'D', b'define', [], _(b'define template keyword'), _(b'KEY=VALUE')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3931
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3932
    _(b'[-r REV]... [-D KEY=VALUE]... TEMPLATE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3933
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3934
)
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3935
def debugtemplate(ui, repo, tmpl, **opts):
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3936
    """parse and apply a template
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3937
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3938
    If -r/--rev is given, the template is processed as a log template and
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3939
    applied to the given changesets. Otherwise, it is processed as a generic
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3940
    template.
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3941
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3942
    Use --verbose to print the parsed tree.
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3943
    """
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3944
    revs = None
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3945
    if opts['rev']:
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3946
        if repo is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3947
            raise error.RepoError(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  3948
                _(b'there is no Mercurial repository here (.hg not found)')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3949
            )
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48101
diff changeset
  3950
        revs = logcmdutil.revrange(repo, opts['rev'])
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3951
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3952
    props = {}
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  3953
    for d in opts['define']:
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3954
        try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3955
            k, v = (e.strip() for e in d.split(b'=', 1))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3956
            if not k or k == b'ui':
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3957
                raise ValueError
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3958
            props[k] = v
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3959
        except ValueError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3960
            raise error.Abort(_(b'malformed keyword definition: %s') % d)
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3961
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3962
    if ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3963
        aliases = ui.configitems(b'templatealias')
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3964
        tree = templater.parse(tmpl)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3965
        ui.note(templater.prettyformat(tree), b'\n')
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3966
        newtree = templater.expandaliases(tree, aliases)
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3967
        if newtree != tree:
43094
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3968
            ui.notenoi18n(
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3969
                b"* expanded:\n", templater.prettyformat(newtree), b'\n'
e8cf9ad52a78 formatting: run black on all file again
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43089
diff changeset
  3970
            )
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3971
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3972
    if revs is None:
35469
f1c54d003327 templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents: 35465
diff changeset
  3973
        tres = formatter.templateresources(ui, repo)
f1c54d003327 templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents: 35465
diff changeset
  3974
        t = formatter.maketemplater(ui, tmpl, resources=tres)
38355
d4fae9a0ab1f templater: add function to look up symbols used in template
Yuya Nishihara <yuya@tcha.org>
parents: 38313
diff changeset
  3975
        if ui.verbose:
d4fae9a0ab1f templater: add function to look up symbols used in template
Yuya Nishihara <yuya@tcha.org>
parents: 38313
diff changeset
  3976
            kwds, funcs = t.symbolsuseddefault()
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3977
            ui.writenoi18n(b"* keywords: %s\n" % b', '.join(sorted(kwds)))
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3978
            ui.writenoi18n(b"* functions: %s\n" % b', '.join(sorted(funcs)))
36988
317382151ac3 templater: rename .render(mapping) to .renderdefault(mapping) (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36954
diff changeset
  3979
        ui.write(t.renderdefault(props))
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3980
    else:
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35730
diff changeset
  3981
        displayer = logcmdutil.maketemplater(ui, repo, tmpl)
38355
d4fae9a0ab1f templater: add function to look up symbols used in template
Yuya Nishihara <yuya@tcha.org>
parents: 38313
diff changeset
  3982
        if ui.verbose:
d4fae9a0ab1f templater: add function to look up symbols used in template
Yuya Nishihara <yuya@tcha.org>
parents: 38313
diff changeset
  3983
            kwds, funcs = displayer.t.symbolsuseddefault()
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3984
            ui.writenoi18n(b"* keywords: %s\n" % b', '.join(sorted(kwds)))
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  3985
            ui.writenoi18n(b"* functions: %s\n" % b', '.join(sorted(funcs)))
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3986
        for r in revs:
33102
1b6946f87c50 py3: use pycompat.strkwargs() to convert kwargs keys to str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33101
diff changeset
  3987
            displayer.show(repo[r], **pycompat.strkwargs(props))
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3988
        displayer.close()
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  3989
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3990
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3991
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3992
    b'debuguigetpass',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  3993
    [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  3994
        (b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  3995
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3996
    _(b'[-p TEXT]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3997
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  3998
)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  3999
def debuguigetpass(ui, prompt=b''):
36792
15c050b5d599 ui: add debug commands to test interactive prompt
Yuya Nishihara <yuya@tcha.org>
parents: 36781
diff changeset
  4000
    """show prompt to type password"""
15c050b5d599 ui: add debug commands to test interactive prompt
Yuya Nishihara <yuya@tcha.org>
parents: 36781
diff changeset
  4001
    r = ui.getpass(prompt)
46079
e614eeb794f9 ui: remove excessive strtolocal() from debuguigetpass
Yuya Nishihara <yuya@tcha.org>
parents: 46024
diff changeset
  4002
    if r is None:
46024
07b0a687c01a ui: ensure `getpass()` returns bytes
Matt Harbison <matt_harbison@yahoo.com>
parents: 45715
diff changeset
  4003
        r = b"<default response>"
44660
649fd6c3ed33 debugcommands: fix typo in debuguigetpass
Yuya Nishihara <yuya@tcha.org>
parents: 44635
diff changeset
  4004
    ui.writenoi18n(b'response: %s\n' % r)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4005
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4006
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4007
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4008
    b'debuguiprompt',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4009
    [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4010
        (b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4011
    ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4012
    _(b'[-p TEXT]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4013
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4014
)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4015
def debuguiprompt(ui, prompt=b''):
36792
15c050b5d599 ui: add debug commands to test interactive prompt
Yuya Nishihara <yuya@tcha.org>
parents: 36781
diff changeset
  4016
    """show plain prompt"""
15c050b5d599 ui: add debug commands to test interactive prompt
Yuya Nishihara <yuya@tcha.org>
parents: 36781
diff changeset
  4017
    r = ui.prompt(prompt)
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  4018
    ui.writenoi18n(b'response: %s\n' % r)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4019
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4020
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4021
@command(b'debugupdatecaches', [])
32265
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  4022
def debugupdatecaches(ui, repo, *pats, **opts):
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  4023
    """warm all known caches in the repository"""
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33336
diff changeset
  4024
    with repo.wlock(), repo.lock():
47298
e96f75857361 updatecaches: use the caches argument in `hg debugupdatecaches`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47139
diff changeset
  4025
        repo.updatecaches(caches=repository.CACHES_ALL)
32265
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  4026
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4027
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4028
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4029
    b'debugupgraderepo',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4030
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4031
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4032
            b'o',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4033
            b'optimize',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4034
            [],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4035
            _(b'extra optimization to perform'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4036
            _(b'NAME'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4037
        ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4038
        (b'', b'run', False, _(b'performs an upgrade')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4039
        (b'', b'backup', True, _(b'keep the old repository content around')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4040
        (b'', b'changelog', None, _(b'select the changelog for upgrade')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4041
        (b'', b'manifest', None, _(b'select the manifest for upgrade')),
45997
7c539f0febbe upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
  4042
        (b'', b'filelogs', None, _(b'select all filelogs for upgrade')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4043
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4044
)
42830
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4045
def debugupgraderepo(ui, repo, run=False, optimize=None, backup=True, **opts):
30774
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4046
    """upgrade a repository to use different features
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4047
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4048
    If no arguments are specified, the repository is evaluated for upgrade
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4049
    and a list of problems and potential optimizations is printed.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4050
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4051
    With ``--run``, a repository upgrade is performed. Behavior of the upgrade
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4052
    can be influenced via additional arguments. More details will be provided
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4053
    by the command output when run without ``--run``.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4054
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4055
    During the upgrade, the repository will be locked and no writes will be
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4056
    allowed.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4057
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4058
    At the end of the upgrade, the repository may not be readable while new
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4059
    repository data is swapped in. This window will be as long as it takes to
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4060
    rename some directories inside the ``.hg`` directory. On most machines, this
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4061
    should complete almost instantaneously and the chances of a consumer being
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4062
    unable to access the repository should be low.
42830
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4063
47061
bd2ed1032b4e debugcommands: fix some plural-agreements I noticed
Augie Fackler <augie@google.com>
parents: 46961
diff changeset
  4064
    By default, all revlogs will be upgraded. You can restrict this using flags
42830
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4065
    such as `--manifest`:
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4066
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4067
      * `--manifest`: only optimize the manifest
cf2b765cecd7 upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42773
diff changeset
  4068
      * `--no-manifest`: optimize all revlog but the manifest
42831
908ff446590e upgrade: add an argument to control changelog upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42830
diff changeset
  4069
      * `--changelog`: optimize the changelog only
908ff446590e upgrade: add an argument to control changelog upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42830
diff changeset
  4070
      * `--no-changelog --no-manifest`: optimize filelogs only
45997
7c539f0febbe upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
  4071
      * `--filelogs`: optimize the filelogs only
46211
2dbe6053d49a debugupgraderepo: minor documentation fix
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46208
diff changeset
  4072
      * `--no-changelog --no-manifest --no-filelogs`: skip all revlog optimizations
30774
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  4073
    """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4074
    return upgrade.upgraderepo(
46208
083438d6f403 upgrade: drop support for old style optimization names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46201
diff changeset
  4075
        ui, repo, run=run, optimize=set(optimize), backup=backup, **opts
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4076
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4077
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4078
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4079
@command(
51400
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4080
    b'debug::unbundle',
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4081
    [
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4082
        (
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4083
            b'u',
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4084
            b'update',
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4085
            None,
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4086
            _(b'update to new branch head if changesets were unbundled'),
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4087
        )
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4088
    ],
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4089
    _(b'[-u] FILE...'),
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4090
    helpcategory=command.CATEGORY_IMPORT_EXPORT,
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4091
)
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4092
def debugunbundle(ui, repo, *args, **kwargs):
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4093
    """same as `hg unbundle`, but pretent to come from a push
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4094
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4095
    This is useful to debug behavior and performance change in this case.
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4096
    """
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4097
    from . import commands  # avoid cycle
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4098
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4099
    unbundle = cmdutil.findcmd(b'unbundle', commands.table)[1][0]
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4100
    return unbundle(ui, repo, *args, _unbundle_source=b'push', **kwargs)
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4101
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4102
e2dfa403452d debug: add a debug::unbundle command that simulate the unbundle from a push
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51377
diff changeset
  4103
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4104
    b'debugwalk', cmdutil.walkopts, _(b'[OPTION]... [FILE]...'), inferrepo=True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4105
)
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4106
def debugwalk(ui, repo, *pats, **opts):
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4107
    """show how files match on given patterns"""
50971
e032f47f5166 debugwalk: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50970
diff changeset
  4108
    m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
38262
7c3a59e2971b debugwalk: show matcher output only if -v/--verbose
Yuya Nishihara <yuya@tcha.org>
parents: 38261
diff changeset
  4109
    if ui.verbose:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
  4110
        ui.writenoi18n(b'* matcher:\n', stringutil.prettyrepr(m), b'\n')
32363
a275186b989a debugcommands: use repo[None].walk instead of repo.walk
Augie Fackler <augie@google.com>
parents: 32337
diff changeset
  4111
    items = list(repo[None].walk(m))
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4112
    if not items:
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4113
        return
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4114
    f = lambda fn: fn
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4115
    if ui.configbool(b'ui', b'slash') and pycompat.ossep != b'/':
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4116
        f = lambda fn: util.normpath(fn)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4117
    fmt = b'f  %%-%ds  %%-%ds  %%s' % (
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4118
        max([len(abs) for abs in items]),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4119
        max([len(repo.pathto(abs)) for abs in items]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4120
    )
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  4121
    for abs in items:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4122
        line = fmt % (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4123
            abs,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4124
            f(repo.pathto(abs)),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4125
            m.exact(abs) and b'exact' or b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4126
        )
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4127
        ui.write(b"%s\n" % line.rstrip())
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4128
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4129
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4130
@command(b'debugwhyunstable', [], _(b'REV'))
36954
efc4fb344c05 debug: add debugwhyunstable that explains instabilities
Anton Shestakov <av6@dwimlabs.net>
parents: 36952
diff changeset
  4131
def debugwhyunstable(ui, repo, rev):
efc4fb344c05 debug: add debugwhyunstable that explains instabilities
Anton Shestakov <av6@dwimlabs.net>
parents: 36952
diff changeset
  4132
    """explain instabilities of a changeset"""
37396
9966f44ecab4 debugwhyunstable: add support for revsets
Martin von Zweigbergk <martinvonz@google.com>
parents: 37350
diff changeset
  4133
    for entry in obsutil.whyunstable(repo, scmutil.revsingle(repo, rev)):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4134
        dnodes = b''
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4135
        if entry.get(b'divergentnodes'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4136
            dnodes = (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4137
                b' '.join(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4138
                    b'%s (%s)' % (ctx.hex(), ctx.phasestr())
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4139
                    for ctx in entry[b'divergentnodes']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4140
                )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4141
                + b' '
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4142
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4143
        ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4144
            b'%s: %s%s %s\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4145
            % (entry[b'instability'], dnodes, entry[b'reason'], entry[b'node'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4146
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4147
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4148
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4149
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4150
    b'debugwireargs',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4151
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4152
        (b'', b'three', b'', b'three'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4153
        (b'', b'four', b'', b'four'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4154
        (b'', b'five', b'', b'five'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4155
    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4156
    + cmdutil.remoteopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4157
    _(b'REPO [OPTIONS]... [ONE [TWO]]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4158
    norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4159
)
30959
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  4160
def debugwireargs(ui, repopath, *vals, **opts):
50972
a4d21089bec7 debugwireargs: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50971
diff changeset
  4161
    repo = hg.peer(ui, pycompat.byteskwargs(opts), repopath)
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4162
    try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4163
        for opt in cmdutil.remoteopts:
50972
a4d21089bec7 debugwireargs: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50971
diff changeset
  4164
            del opts[pycompat.sysstr(opt[1])]
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4165
        args = {}
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
  4166
        for k, v in opts.items():
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4167
            if v:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4168
                args[k] = v
50972
a4d21089bec7 debugwireargs: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50971
diff changeset
  4169
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4170
        # run twice to check that we don't mess up the stream for the next command
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4171
        res1 = repo.debugwireargs(*vals, **args)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4172
        res2 = repo.debugwireargs(*vals, **args)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4173
        ui.write(b"%s\n" % res1)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4174
        if res1 != res2:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4175
            ui.warn(b"%s\n" % res2)
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4176
    finally:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46655
diff changeset
  4177
        repo.close()
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4178
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4179
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4180
def _parsewirelangblocks(fh):
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4181
    activeaction = None
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4182
    blocklines = []
40174
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4183
    lastindent = 0
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4184
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4185
    for line in fh:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4186
        line = line.rstrip()
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4187
        if not line:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4188
            continue
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4189
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4190
        if line.startswith(b'#'):
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4191
            continue
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4192
39062
efeeb73f54c3 debugcommands: fix a missing b prefix
Augie Fackler <augie@google.com>
parents: 38972
diff changeset
  4193
        if not line.startswith(b' '):
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4194
            # New block. Flush previous one.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4195
            if activeaction:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4196
                yield activeaction, blocklines
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4197
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4198
            activeaction = line
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4199
            blocklines = []
40174
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4200
            lastindent = 0
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4201
            continue
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4202
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4203
        # Else we start with an indent.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4204
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4205
        if not activeaction:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4206
            raise error.Abort(_(b'indented line outside of block'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4207
40174
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4208
        indent = len(line) - len(line.lstrip())
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4209
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4210
        # If this line is indented more than the last line, concatenate it.
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4211
        if indent > lastindent and blocklines:
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4212
            blocklines[-1] += line.lstrip()
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4213
        else:
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4214
            blocklines.append(line)
64360202d5b2 debugcommands: support wrapping long lines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
  4215
            lastindent = indent
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4216
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4217
    # Flush last block.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4218
    if activeaction:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4219
        yield activeaction, blocklines
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4220
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4221
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4222
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4223
    b'debugwireproto',
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4224
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4225
        (b'', b'localssh', False, _(b'start an SSH server for this repo')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4226
        (b'', b'peer', b'', _(b'construct a specific version of the peer')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4227
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4228
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4229
            b'noreadstderr',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4230
            False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4231
            _(b'do not read from stderr of the remote'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4232
        ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4233
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4234
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4235
            b'nologhandshake',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4236
            False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4237
            _(b'do not log I/O related to the peer handshake'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4238
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4239
    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4240
    + cmdutil.remoteopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4241
    _(b'[PATH]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4242
    optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4243
)
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4244
def debugwireproto(ui, repo, path=None, **opts):
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4245
    """send wire protocol commands to a server
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4246
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4247
    This command can be used to issue wire protocol commands to remote
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4248
    peers and to debug the raw data being exchanged.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4249
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4250
    ``--localssh`` will start an SSH server against the current repository
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4251
    and connect to that. By default, the connection will perform a handshake
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4252
    and establish an appropriate peer instance.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4253
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4254
    ``--peer`` can be used to bypass the handshake protocol and construct a
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4255
    peer instance using the specified class type. Valid values are ``raw``,
48526
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4256
    ``ssh1``. ``raw`` instances only allow sending raw data payloads and
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4257
    don't support higher-level command actions.
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4258
36534
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4259
    ``--noreadstderr`` can be used to disable automatic reading from stderr
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4260
    of the peer (for SSH connections only). Disabling automatic reading of
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4261
    stderr is useful for making output more deterministic.
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4262
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4263
    Commands are issued via a mini language which is specified via stdin.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4264
    The language consists of individual actions to perform. An action is
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4265
    defined by a block. A block is defined as a line with no leading
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4266
    space followed by 0 or more lines with leading space. Blocks are
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4267
    effectively a high-level command with additional metadata.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4268
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4269
    Lines beginning with ``#`` are ignored.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4270
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4271
    The following sections denote available actions.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4272
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4273
    raw
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4274
    ---
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4275
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4276
    Send raw data to the server.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4277
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4278
    The block payload contains the raw data to send as one atomic send
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4279
    operation. The data may not actually be delivered in a single system
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4280
    call: it depends on the abilities of the transport being used.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4281
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4282
    Each line in the block is de-indented and concatenated. Then, that
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4283
    value is evaluated as a Python b'' literal. This allows the use of
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4284
    backslash escaping, etc.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4285
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4286
    raw+
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4287
    ----
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4288
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4289
    Behaves like ``raw`` except flushes output afterwards.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4290
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4291
    command <X>
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4292
    -----------
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4293
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4294
    Send a request to run a named command, whose name follows the ``command``
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4295
    string.
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4296
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4297
    Arguments to the command are defined as lines in this block. The format of
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4298
    each line is ``<key> <value>``. e.g.::
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4299
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4300
       command listkeys
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4301
           namespace bookmarks
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4302
37483
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4303
    If the value begins with ``eval:``, it will be interpreted as a Python
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4304
    literal expression. Otherwise values are interpreted as Python b'' literals.
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4305
    This allows sending complex types and encoding special byte sequences via
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4306
    backslash escaping.
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4307
36534
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4308
    The following arguments have special meaning:
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4309
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4310
    ``PUSHFILE``
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4311
        When defined, the *push* mechanism of the peer will be used instead
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4312
        of the static request-response mechanism and the content of the
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4313
        file specified in the value of this argument will be sent as the
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4314
        command payload.
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4315
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4316
        This can be used to submit a local bundle file to the remote.
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4317
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4318
    batchbegin
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4319
    ----------
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4320
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4321
    Instruct the peer to begin a batched send.
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4322
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4323
    All ``command`` blocks are queued for execution until the next
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4324
    ``batchsubmit`` block.
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4325
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4326
    batchsubmit
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4327
    -----------
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4328
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4329
    Submit previously queued ``command`` blocks as a batch request.
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4330
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4331
    This action MUST be paired with a ``batchbegin`` action.
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4332
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4333
    httprequest <method> <path>
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4334
    ---------------------------
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4335
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4336
    (HTTP peer only)
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4337
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4338
    Send an HTTP request to the peer.
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4339
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4340
    The HTTP request line follows the ``httprequest`` action. e.g. ``GET /foo``.
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4341
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4342
    Arguments of the form ``<key>: <value>`` are interpreted as HTTP request
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4343
    headers to add to the request. e.g. ``Accept: foo``.
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4344
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4345
    The following arguments are special:
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4346
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4347
    ``BODYFILE``
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4348
        The content of the file defined as the value to this argument will be
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4349
        transferred verbatim as the HTTP request body.
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4350
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4351
    ``frame <type> <flags> <payload>``
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4352
        Send a unified protocol frame as part of the request body.
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4353
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4354
        All frames will be collected and sent as the body to the HTTP
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4355
        request.
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4356
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4357
    close
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4358
    -----
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4359
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4360
    Close the connection to the server.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4361
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4362
    flush
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4363
    -----
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4364
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4365
    Flush data written to the server.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4366
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4367
    readavailable
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4368
    -------------
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4369
36843
31581528f242 debugwireproto: close the write end before consuming all available data
Yuya Nishihara <yuya@tcha.org>
parents: 36835
diff changeset
  4370
    Close the write end of the connection and read all available data from
31581528f242 debugwireproto: close the write end before consuming all available data
Yuya Nishihara <yuya@tcha.org>
parents: 36835
diff changeset
  4371
    the server.
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4372
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4373
    If the connection to the server encompasses multiple pipes, we poll both
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4374
    pipes and read available data.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4375
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4376
    readline
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4377
    --------
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4378
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4379
    Read a line of output from the server. If there are multiple output
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4380
    pipes, reads only the main pipe.
37007
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4381
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4382
    ereadline
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4383
    ---------
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4384
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4385
    Like ``readline``, but read from the stderr pipe, if available.
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4386
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4387
    read <X>
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4388
    --------
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4389
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4390
    ``read()`` N bytes from the server's main output pipe.
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4391
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4392
    eread <X>
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4393
    ---------
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4394
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4395
    ``read()`` N bytes from the server's stderr pipe, if available.
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4396
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4397
    Specifying Unified Frame-Based Protocol Frames
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4398
    ----------------------------------------------
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4399
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4400
    It is possible to emit a *Unified Frame-Based Protocol* by using special
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4401
    syntax.
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4402
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4403
    A frame is composed as a type, flags, and payload. These can be parsed
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4404
    from a string of the form:
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4405
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4406
       <request-id> <stream-id> <stream-flags> <type> <flags> <payload>
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4407
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4408
    ``request-id`` and ``stream-id`` are integers defining the request and
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4409
    stream identifiers.
37057
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37051
diff changeset
  4410
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4411
    ``type`` can be an integer value for the frame type or the string name
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4412
    of the type. The strings are defined in ``wireprotoframing.py``. e.g.
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4413
    ``command-name``.
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4414
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4415
    ``stream-flags`` and ``flags`` are a ``|`` delimited list of flag
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4416
    components. Each component (and there can be just one) can be an integer
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4417
    or a flag name for stream flags or frame flags, respectively. Values are
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4418
    resolved to integers and then bitwise OR'd together.
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37283
diff changeset
  4419
37290
cc5a040fe150 wireproto: syntax for encoding CBOR into frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
  4420
    ``payload`` represents the raw frame payload. If it begins with
cc5a040fe150 wireproto: syntax for encoding CBOR into frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
  4421
    ``cbor:``, the following string is evaluated as Python code and the
cc5a040fe150 wireproto: syntax for encoding CBOR into frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
  4422
    resulting object is fed into a CBOR encoder. Otherwise it is interpreted
cc5a040fe150 wireproto: syntax for encoding CBOR into frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
  4423
    as a Python byte string literal.
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4424
    """
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4425
    if opts['localssh'] and not repo:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4426
        raise error.Abort(_(b'--localssh requires a repository'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4427
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4428
    if opts['peer'] and opts['peer'] not in (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4429
        b'raw',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4430
        b'ssh1',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4431
    ):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4432
        raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4433
            _(b'invalid value for --peer'),
48526
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4434
            hint=_(b'valid values are "raw" and "ssh1"'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4435
        )
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4436
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4437
    if path and opts['localssh']:
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  4438
        raise error.Abort(_(b'cannot specify --localssh with an explicit path'))
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4439
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4440
    if ui.interactive():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4441
        ui.write(_(b'(waiting for commands on stdin)\n'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4442
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4443
    blocks = list(_parsewirelangblocks(ui.fin))
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4444
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4445
    proc = None
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4446
    stdin = None
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4447
    stdout = None
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4448
    stderr = None
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4449
    opener = None
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4450
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4451
    if opts['localssh']:
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4452
        # We start the SSH server in its own process so there is process
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4453
        # separation. This prevents a whole class of potential bugs around
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4454
        # shared state from interfering with server operation.
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
  4455
        args = procutil.hgcmd() + [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4456
            b'-R',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4457
            repo.root,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4458
            b'debugserve',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4459
            b'--sshstdio',
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4460
        ]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4461
        proc = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4462
            pycompat.rapply(procutil.tonativestr, args),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4463
            stdin=subprocess.PIPE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4464
            stdout=subprocess.PIPE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4465
            stderr=subprocess.PIPE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4466
            bufsize=0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4467
        )
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4468
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4469
        stdin = proc.stdin
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4470
        stdout = proc.stdout
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4471
        stderr = proc.stderr
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4472
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4473
        # We turn the pipes into observers so we can log I/O.
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4474
        if ui.verbose or opts['peer'] == b'raw':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4475
            stdin = util.makeloggingfileobject(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4476
                ui, proc.stdin, b'i', logdata=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4477
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4478
            stdout = util.makeloggingfileobject(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4479
                ui, proc.stdout, b'o', logdata=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4480
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4481
            stderr = util.makeloggingfileobject(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4482
                ui, proc.stderr, b'e', logdata=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4483
            )
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4484
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4485
        # --localssh also implies the peer connection settings.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4486
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4487
        url = b'ssh://localserver'
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4488
        autoreadstderr = not opts['noreadstderr']
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4489
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4490
        if opts['peer'] == b'ssh1':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4491
            ui.write(_(b'creating ssh peer for wire protocol version 1\n'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4492
            peer = sshpeer.sshv1peer(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4493
                ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4494
                url,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4495
                proc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4496
                stdin,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4497
                stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4498
                stderr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4499
                None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4500
                autoreadstderr=autoreadstderr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4501
            )
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4502
        elif opts['peer'] == b'raw':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4503
            ui.write(_(b'using raw connection to peer\n'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4504
            peer = None
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4505
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4506
            ui.write(_(b'creating ssh peer from handshake results\n'))
50388
ed052780ad5e peer: rename makepeer() → _make_peer()
Manuel Jacob <me@manueljacob.de>
parents: 50347
diff changeset
  4507
            peer = sshpeer._make_peer(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4508
                ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4509
                url,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4510
                proc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4511
                stdin,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4512
                stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4513
                stderr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4514
                autoreadstderr=autoreadstderr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4515
            )
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4516
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4517
    elif path:
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4518
        # We bypass hg.peer() so we can proxy the sockets.
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4519
        # TODO consider not doing this because we skip
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4520
        # ``hg.wirepeersetupfuncs`` and potentially other useful functionality.
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
  4521
        u = urlutil.url(path)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4522
        if u.scheme != b'http':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4523
            raise error.Abort(_(b'only http:// paths are currently supported'))
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4524
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4525
        url, authinfo = u.authinfo()
37483
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4526
        openerargs = {
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4527
            'useragent': b'Mercurial debugwireproto',
37483
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4528
        }
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4529
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4530
        # Turn pipes/sockets into observers so we can log I/O.
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4531
        if ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4532
            openerargs.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4533
                {
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4534
                    'loggingfh': ui,
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4535
                    'loggingname': b's',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4536
                    'loggingopts': {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4537
                        'logdata': True,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4538
                        'logdataapis': False,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45929
diff changeset
  4539
                    },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4540
                }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4541
            )
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4542
37044
d3a9036d9ae9 util: don't log low-level I/O calls for HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37013
diff changeset
  4543
        if ui.debugflag:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4544
            openerargs['loggingopts']['logdataapis'] = True
37044
d3a9036d9ae9 util: don't log low-level I/O calls for HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37013
diff changeset
  4545
37045
a708e1e4d7a8 url: support suppressing Accept header
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37044
diff changeset
  4546
        # Don't send default headers when in raw mode. This allows us to
a708e1e4d7a8 url: support suppressing Accept header
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37044
diff changeset
  4547
        # bypass most of the behavior of our URL handling code so we can
a708e1e4d7a8 url: support suppressing Accept header
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37044
diff changeset
  4548
        # have near complete control over what's sent on the wire.
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4549
        if opts['peer'] == b'raw':
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4550
            openerargs['sendaccept'] = False
37045
a708e1e4d7a8 url: support suppressing Accept header
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37044
diff changeset
  4551
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4552
        opener = urlmod.opener(ui, authinfo, **openerargs)
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4553
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4554
        if opts['peer'] == b'raw':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4555
            ui.write(_(b'using raw connection to peer\n'))
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4556
            peer = None
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4557
        elif opts['peer']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4558
            raise error.Abort(
50973
fd6c748eb8a6 debugwireproto: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50972
diff changeset
  4559
                _(b'--peer %s not supported with HTTP peers') % opts['peer']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4560
            )
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4561
        else:
49759
cfe8d88a453e peer: get the `path` object down to the httppeer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49728
diff changeset
  4562
            peer_path = urlutil.try_path(ui, path)
50388
ed052780ad5e peer: rename makepeer() → _make_peer()
Manuel Jacob <me@manueljacob.de>
parents: 50347
diff changeset
  4563
            peer = httppeer._make_peer(ui, peer_path, opener=opener)
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4564
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4565
        # We /could/ populate stdin/stdout with sock.makefile()...
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4566
    else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4567
        raise error.Abort(_(b'unsupported connection configuration'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4568
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4569
    batchedcommands = None
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4570
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4571
    # Now perform actions based on the parsed wire language instructions.
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4572
    for action, lines in blocks:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4573
        if action in (b'raw', b'raw+'):
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4574
            if not stdin:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4575
                raise error.Abort(_(b'cannot call raw/raw+ on this peer'))
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4576
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4577
            # Concatenate the data together.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4578
            data = b''.join(l.lstrip() for l in lines)
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37057
diff changeset
  4579
            data = stringutil.unescapestr(data)
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4580
            stdin.write(data)
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4581
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4582
            if action == b'raw+':
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4583
                stdin.flush()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4584
        elif action == b'flush':
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4585
            if not stdin:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4586
                raise error.Abort(_(b'cannot call flush on this peer'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4587
            stdin.flush()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4588
        elif action.startswith(b'command'):
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4589
            if not peer:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4590
                raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4591
                    _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4592
                        b'cannot send commands unless peer instance '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4593
                        b'is available'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4594
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4595
                )
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4596
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4597
            command = action.split(b' ', 1)[1]
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4598
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4599
            args = {}
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4600
            for line in lines:
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4601
                # We need to allow empty values.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4602
                fields = line.lstrip().split(b' ', 1)
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4603
                if len(fields) == 1:
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4604
                    key = fields[0]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4605
                    value = b''
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4606
                else:
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4607
                    key, value = fields
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4608
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4609
                if value.startswith(b'eval:'):
37483
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4610
                    value = stringutil.evalpythonliteral(value[5:])
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4611
                else:
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4612
                    value = stringutil.unescapestr(value)
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4613
61e405fb6372 wireproto: crude support for version 2 HTTP peer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37396
diff changeset
  4614
                args[key] = value
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4615
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4616
            if batchedcommands is not None:
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4617
                batchedcommands.append((command, args))
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4618
                continue
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4619
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4620
            ui.status(_(b'sending %s command\n') % command)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4621
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4622
            if b'PUSHFILE' in args:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4623
                with open(args[b'PUSHFILE'], 'rb') as fh:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4624
                    del args[b'PUSHFILE']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4625
                    res, output = peer._callpush(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4626
                        command, fh, **pycompat.strkwargs(args)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4627
                    )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4628
                    ui.status(_(b'result: %s\n') % stringutil.escapestr(res))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4629
                    ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4630
                        _(b'remote output: %s\n') % stringutil.escapestr(output)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4631
                    )
36534
5faeabb07cf5 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36531
diff changeset
  4632
            else:
37652
fe8c6f9f2914 debugcommands: use command executor for invoking commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37647
diff changeset
  4633
                with peer.commandexecutor() as e:
fe8c6f9f2914 debugcommands: use command executor for invoking commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37647
diff changeset
  4634
                    res = e.callcommand(command, args).result()
fe8c6f9f2914 debugcommands: use command executor for invoking commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37647
diff changeset
  4635
48526
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4636
                ui.status(
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4637
                    _(b'response: %s\n')
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4638
                    % stringutil.pprint(res, bprefix=True, indent=2)
04688c51f81f exchangev2: remove it
Raphaël Gomès <rgomes@octobus.net>
parents: 48187
diff changeset
  4639
                )
36530
bde0bd50f368 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36528
diff changeset
  4640
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4641
        elif action == b'batchbegin':
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4642
            if batchedcommands is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4643
                raise error.Abort(_(b'nested batchbegin not allowed'))
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4644
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4645
            batchedcommands = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4646
        elif action == b'batchsubmit':
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4647
            # There is a batching API we could go through. But it would be
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4648
            # difficult to normalize requests into function calls. It is easier
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4649
            # to bypass this layer and normalize to commands + args.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4650
            ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4651
                _(b'sending batch with %d sub-commands\n')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4652
                % len(batchedcommands)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4653
            )
43704
23ad4f0c1578 debugcommands: add assertions to convince pytype peer is not None
Augie Fackler <augie@google.com>
parents: 43703
diff changeset
  4654
            assert peer is not None
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4655
            for i, chunk in enumerate(peer._submitbatch(batchedcommands)):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4656
                ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4657
                    _(b'response #%d: %s\n') % (i, stringutil.escapestr(chunk))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4658
                )
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4659
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4660
            batchedcommands = None
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4661
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4662
        elif action.startswith(b'httprequest '):
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4663
            if not opener:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4664
                raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43116
diff changeset
  4665
                    _(b'cannot use httprequest without an HTTP peer')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4666
                )
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4667
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4668
            request = action.split(b' ', 2)
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4669
            if len(request) != 3:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4670
                raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4671
                    _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4672
                        b'invalid httprequest: expected format is '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4673
                        b'"httprequest <method> <path>'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4674
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4675
                )
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4676
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4677
            method, httppath = request[1:]
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4678
            headers = {}
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4679
            body = None
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4680
            frames = []
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4681
            for line in lines:
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4682
                line = line.lstrip()
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4683
                m = re.match(b'^([a-zA-Z0-9_-]+): (.*)$', line)
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4684
                if m:
39955
c421c22d3ad2 py3: convert HTTP request headers to str
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39884
diff changeset
  4685
                    # Headers need to use native strings.
c421c22d3ad2 py3: convert HTTP request headers to str
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39884
diff changeset
  4686
                    key = pycompat.strurl(m.group(1))
c421c22d3ad2 py3: convert HTTP request headers to str
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39884
diff changeset
  4687
                    value = pycompat.strurl(m.group(2))
c421c22d3ad2 py3: convert HTTP request headers to str
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39884
diff changeset
  4688
                    headers[key] = value
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4689
                    continue
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4690
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4691
                if line.startswith(b'BODYFILE '):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4692
                    with open(line.split(b' ', 1), b'rb') as fh:
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4693
                        body = fh.read()
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4694
                elif line.startswith(b'frame '):
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4695
                    frame = wireprotoframing.makeframefromhumanstring(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4696
                        line[len(b'frame ') :]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4697
                    )
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4698
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4699
                    frames.append(frame)
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4700
                else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4701
                    raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4702
                        _(b'unknown argument to httprequest: %s') % line
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4703
                    )
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4704
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4705
            url = path + httppath
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4706
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4707
            if frames:
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4708
                body = b''.join(bytes(f) for f in frames)
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
  4709
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4710
            req = urlmod.urlreq.request(pycompat.strurl(url), body, headers)
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4711
37047
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37045
diff changeset
  4712
            # urllib.Request insists on using has_data() as a proxy for
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37045
diff changeset
  4713
            # determining the request method. Override that to use our
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37045
diff changeset
  4714
            # explicitly requested method.
39064
a2fa7247ca70 debugcommands: get_method should always return a sysstr
Augie Fackler <augie@google.com>
parents: 39062
diff changeset
  4715
            req.get_method = lambda: pycompat.sysstr(method)
37047
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37045
diff changeset
  4716
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4717
            try:
37557
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37553
diff changeset
  4718
                res = opener.open(req)
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37553
diff changeset
  4719
                body = res.read()
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4720
            except util.urlerr.urlerror as e:
39065
730e7d92a023 debugcommands: urlerror only has a read() method in Python 2
Augie Fackler <augie@google.com>
parents: 39064
diff changeset
  4721
                # read() method must be called, but only exists in Python 2
730e7d92a023 debugcommands: urlerror only has a read() method in Python 2
Augie Fackler <augie@google.com>
parents: 39064
diff changeset
  4722
                getattr(e, 'read', lambda: None)()
37557
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37553
diff changeset
  4723
                continue
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37553
diff changeset
  4724
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4725
            ct = res.headers.get('Content-Type')
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
  4726
            if ct == 'application/mercurial-cbor':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4727
                ui.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4728
                    _(b'cbor> %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4729
                    % stringutil.pprint(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4730
                        cborutil.decodeall(body), bprefix=True, indent=2
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4731
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43067
diff changeset
  4732
                )
37013
b6a7070e7663 debugcommands: support sending HTTP requests with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37012
diff changeset
  4733
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4734
        elif action == b'close':
43704
23ad4f0c1578 debugcommands: add assertions to convince pytype peer is not None
Augie Fackler <augie@google.com>
parents: 43703
diff changeset
  4735
            assert peer is not None
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4736
            peer.close()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4737
        elif action == b'readavailable':
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4738
            if not stdout or not stderr:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4739
                raise error.Abort(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4740
                    _(b'readavailable not available on this peer')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4741
                )
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4742
36843
31581528f242 debugwireproto: close the write end before consuming all available data
Yuya Nishihara <yuya@tcha.org>
parents: 36835
diff changeset
  4743
            stdin.close()
31581528f242 debugwireproto: close the write end before consuming all available data
Yuya Nishihara <yuya@tcha.org>
parents: 36835
diff changeset
  4744
            stdout.read()
31581528f242 debugwireproto: close the write end before consuming all available data
Yuya Nishihara <yuya@tcha.org>
parents: 36835
diff changeset
  4745
            stderr.read()
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4746
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4747
        elif action == b'readline':
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4748
            if not stdout:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4749
                raise error.Abort(_(b'readline not available on this peer'))
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4750
            stdout.readline()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4751
        elif action == b'ereadline':
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4752
            if not stderr:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4753
                raise error.Abort(_(b'ereadline not available on this peer'))
37007
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4754
            stderr.readline()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4755
        elif action.startswith(b'read '):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4756
            count = int(action.split(b' ', 1)[1])
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4757
            if not stdout:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4758
                raise error.Abort(_(b'read not available on this peer'))
37007
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4759
            stdout.read(count)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4760
        elif action.startswith(b'eread '):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4761
            count = int(action.split(b' ', 1)[1])
37012
fc8939825632 debugcommands: support connecting to HTTP peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37007
diff changeset
  4762
            if not stderr:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4763
                raise error.Abort(_(b'eread not available on this peer'))
37007
143219fc2620 debugcommands: introduce actions to perform deterministic reads
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36988
diff changeset
  4764
            stderr.read(count)
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4765
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4766
            raise error.Abort(_(b'unknown action: %s') % action)
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4767
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4768
    if batchedcommands is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  4769
        raise error.Abort(_(b'unclosed "batchbegin" request'))
36531
097ad1079192 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36530
diff changeset
  4770
36528
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4771
    if peer:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4772
        peer.close()
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4773
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4774
    if proc:
72e487851a53 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36527
diff changeset
  4775
        proc.kill()