mercurial/debugcommands.py
author Boris Feld <boris.feld@octobus.net>
Thu, 07 Dec 2017 16:05:20 +0100
changeset 35337 cfb403b92f43
parent 35336 c3e4f196b6e0
child 35338 bd326f3e0e14
permissions -rw-r--r--
debugformat: add data about the config when verbose In verbose mode, the command also displays the current configuration choice for the variant and the global Mercurial default for it.
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
#
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     3
# Copyright 2005-2016 Matt Mackall <mpm@selenic.com>
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
from __future__ import absolute_import
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     9
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
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
    12
import difflib
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    13
import errno
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
    14
import operator
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
    15
import os
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    16
import random
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    17
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
    18
import ssl
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
    19
import string
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    20
import sys
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    21
import tempfile
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
    22
import time
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    23
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    24
from .i18n import _
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    25
from .node import (
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
    26
    bin,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    27
    hex,
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
    28
    nullhex,
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
    29
    nullid,
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
    30
    nullrev,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    31
    short,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    32
)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    33
from . import (
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    34
    bundle2,
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    35
    changegroup,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    36
    cmdutil,
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
    37
    color,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    38
    context,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    39
    dagparser,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    40
    dagutil,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    41
    encoding,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    42
    error,
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    43
    exchange,
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
    44
    extensions,
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
    45
    filemerge,
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
    46
    fileset,
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
    47
    formatter,
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
    48
    hg,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    49
    localrepo,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    50
    lock as lockmod,
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
    51
    merge as mergemod,
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
    52
    obsolete,
33142
4f49810a1011 obsutil: move 'successorssets' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33107
diff changeset
    53
    obsutil,
32745
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
    54
    phases,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    55
    policy,
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
    56
    pvec,
30519
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30518
diff changeset
    57
    pycompat,
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32315
diff changeset
    58
    registrar,
30775
513d68a90398 repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30774
diff changeset
    59
    repair,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    60
    revlog,
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
    61
    revset,
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
    62
    revsetlang,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    63
    scmutil,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    64
    setdiscovery,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    65
    simplemerge,
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
    66
    smartset,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    67
    sslutil,
30502
6da030496667 debugcommands: move debug{create,apply}streambundleclone to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30501
diff changeset
    68
    streamclone,
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
    69
    templater,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
    70
    treediscovery,
31864
70d163b86316 upgrade: extract code in its own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31689
diff changeset
    71
    upgrade,
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
    72
    util,
31239
9cdba6072b97 vfs: use 'vfs' module directly in 'mercurial.debugcommand'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31216
diff changeset
    73
    vfs as vfsmod,
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    74
)
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    75
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    76
release = lockmod.release
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    77
32377
c942c83ac2ec debugcommands: use temporary dict for its command table
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
    78
command = registrar.command()
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    79
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    80
@command('debugancestor', [], _('[INDEX] REV1 REV2'), optionalrepo=True)
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    81
def debugancestor(ui, repo, *args):
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    82
    """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
    83
    if len(args) == 3:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    84
        index, rev1, rev2 = args
31239
9cdba6072b97 vfs: use 'vfs' module directly in 'mercurial.debugcommand'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31216
diff changeset
    85
        r = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False), index)
30401
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    86
        lookup = r.lookup
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    87
    elif len(args) == 2:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    88
        if not repo:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    89
            raise error.Abort(_('there is no Mercurial repository here '
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    90
                                '(.hg not found)'))
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    91
        rev1, rev2 = args
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    92
        r = repo.changelog
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    93
        lookup = repo.lookup
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    94
    else:
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    95
        raise error.Abort(_('either two or three arguments required'))
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    96
    a = r.ancestor(lookup(rev1), lookup(rev2))
869d660b8669 debugcommands: introduce standalone module for debug commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    97
    ui.write('%d:%s\n' % (r.rev(a), hex(a)))
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
    98
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
    99
@command('debugapplystreamclonebundle', [], 'FILE')
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   100
def debugapplystreamclonebundle(ui, repo, fname):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   101
    """apply a stream clone bundle file"""
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   102
    f = hg.openpath(ui, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   103
    gen = exchange.readbundle(ui, f, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   104
    gen.apply(repo)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   105
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   106
@command('debugbuilddag',
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   107
    [('m', 'mergeable-file', None, _('add single file mergeable changes')),
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   108
    ('o', 'overwritten-file', None, _('add single file all revs overwrite')),
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   109
    ('n', 'new-file', None, _('add new file at each rev'))],
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   110
    _('[OPTION]... [TEXT]'))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   111
def debugbuilddag(ui, repo, text=None,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   112
                  mergeable_file=False,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   113
                  overwritten_file=False,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   114
                  new_file=False):
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   115
    """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
   116
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   117
    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
   118
    command line.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   119
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   120
    Elements:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   121
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   122
     - "+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
   123
     - "." is a single node based on the current default parent
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   124
     - "$" resets the default parent to null (implied at the start);
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   125
           otherwise the default parent is always the last node created
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   126
     - "<p" sets the default parent to the backref p
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   127
     - "*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
   128
     - "*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
   129
     - "/p2" is a merge of the preceding node and p2
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   130
     - ":tag" defines a local tag for the preceding node
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   131
     - "@branch" sets the named branch for subsequent nodes
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   132
     - "#...\\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
   133
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   134
    Whitespace between the above elements is ignored.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   135
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   136
    A backref is either
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   137
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   138
     - 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
   139
       node, or
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   140
     - 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
   141
     - empty to denote the default parent.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   142
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   143
    All string valued-elements are either strictly alphanumeric, or must
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   144
    be enclosed in double quotes ("..."), with "\\" as escape character.
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   145
    """
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   146
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   147
    if text is None:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   148
        ui.status(_("reading DAG from stdin\n"))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   149
        text = ui.fin.read()
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   150
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   151
    cl = repo.changelog
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   152
    if len(cl) > 0:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   153
        raise error.Abort(_('repository is not empty'))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   154
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   155
    # determine number of revs in DAG
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   156
    total = 0
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   157
    for type, data in dagparser.parsedag(text):
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   158
        if type == 'n':
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   159
            total += 1
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   160
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   161
    if mergeable_file:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   162
        linesperrev = 2
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   163
        # make a file with k lines per rev
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   164
        initialmergedlines = [str(i) for i in xrange(0, total * linesperrev)]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   165
        initialmergedlines.append("")
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   166
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   167
    tags = []
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   168
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   169
    wlock = lock = tr = None
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   170
    try:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   171
        wlock = repo.wlock()
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   172
        lock = repo.lock()
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   173
        tr = repo.transaction("builddag")
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   174
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   175
        at = -1
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   176
        atbranch = 'default'
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   177
        nodeids = []
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   178
        id = 0
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   179
        ui.progress(_('building'), id, unit=_('revisions'), total=total)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   180
        for type, data in dagparser.parsedag(text):
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   181
            if type == 'n':
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   182
                ui.note(('node %s\n' % str(data)))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   183
                id, ps = data
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   184
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   185
                files = []
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   186
                fctxs = {}
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   187
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   188
                p2 = None
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   189
                if mergeable_file:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   190
                    fn = "mf"
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   191
                    p1 = repo[ps[0]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   192
                    if len(ps) > 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   193
                        p2 = repo[ps[1]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   194
                        pa = p1.ancestor(p2)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   195
                        base, local, other = [x[fn].data() for x in (pa, p1,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   196
                                                                     p2)]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   197
                        m3 = simplemerge.Merge3Text(base, local, other)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   198
                        ml = [l.strip() for l in m3.merge_lines()]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   199
                        ml.append("")
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   200
                    elif at > 0:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   201
                        ml = p1[fn].data().split("\n")
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   202
                    else:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   203
                        ml = initialmergedlines
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   204
                    ml[id * linesperrev] += " r%i" % id
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   205
                    mergedtext = "\n".join(ml)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   206
                    files.append(fn)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   207
                    fctxs[fn] = context.memfilectx(repo, fn, mergedtext)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   208
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   209
                if overwritten_file:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   210
                    fn = "of"
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   211
                    files.append(fn)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   212
                    fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   213
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   214
                if new_file:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   215
                    fn = "nf%i" % id
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   216
                    files.append(fn)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   217
                    fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   218
                    if len(ps) > 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   219
                        if not p2:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   220
                            p2 = repo[ps[1]]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   221
                        for fn in p2:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   222
                            if fn.startswith("nf"):
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   223
                                files.append(fn)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   224
                                fctxs[fn] = p2[fn]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   225
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   226
                def fctxfn(repo, cx, path):
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   227
                    return fctxs.get(path)
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
                if len(ps) == 0 or ps[0] < 0:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   230
                    pars = [None, None]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   231
                elif len(ps) == 1:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   232
                    pars = [nodeids[ps[0]], None]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   233
                else:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   234
                    pars = [nodeids[p] for p in ps]
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   235
                cx = context.memctx(repo, pars, "r%i" % id, files, fctxfn,
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   236
                                    date=(id, 0),
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   237
                                    user="debugbuilddag",
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   238
                                    extra={'branch': atbranch})
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   239
                nodeid = repo.commitctx(cx)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   240
                nodeids.append(nodeid)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   241
                at = id
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   242
            elif type == 'l':
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   243
                id, name = data
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   244
                ui.note(('tag %s\n' % name))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   245
                tags.append("%s %s\n" % (hex(repo.changelog.node(id)), name))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   246
            elif type == 'a':
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   247
                ui.note(('branch %s\n' % data))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   248
                atbranch = data
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   249
            ui.progress(_('building'), id, unit=_('revisions'), total=total)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   250
        tr.close()
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   251
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   252
        if tags:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   253
            repo.vfs.write("localtags", "".join(tags))
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   254
    finally:
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   255
        ui.progress(_('building'), None)
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30401
diff changeset
   256
        release(tr, lock, wlock)
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   257
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   258
def _debugchangegroup(ui, gen, all=None, indent=0, **opts):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   259
    indent_string = ' ' * indent
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   260
    if all:
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   261
        ui.write(("%sformat: id, p1, p2, cset, delta base, len(delta)\n")
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   262
                 % indent_string)
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   263
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   264
        def showchunks(named):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   265
            ui.write("\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
   266
            for deltadata in gen.deltaiter():
311f6ccf8f23 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 34130
diff changeset
   267
                node, p1, p2, cs, deltabase, delta, flags = deltadata
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   268
                ui.write("%s%s %s %s %s %s %s\n" %
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   269
                         (indent_string, hex(node), hex(p1), hex(p2),
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   270
                          hex(cs), hex(deltabase), len(delta)))
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   271
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   272
        chunkdata = gen.changelogheader()
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   273
        showchunks("changelog")
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   274
        chunkdata = gen.manifestheader()
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   275
        showchunks("manifest")
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   276
        for chunkdata in iter(gen.filelogheader, {}):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   277
            fname = chunkdata['filename']
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   278
            showchunks(fname)
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   279
    else:
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   280
        if isinstance(gen, bundle2.unbundle20):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   281
            raise error.Abort(_('use debugbundle2 for this file'))
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   282
        chunkdata = gen.changelogheader()
34292
311f6ccf8f23 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 34130
diff changeset
   283
        for deltadata in gen.deltaiter():
311f6ccf8f23 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 34130
diff changeset
   284
            node, p1, p2, cs, deltabase, delta, flags = deltadata
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   285
            ui.write("%s%s\n" % (indent_string, hex(node)))
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   286
33029
b482d80e041b debugcommands: pass part, not read data, into _debugobsmarker()
Martin von Zweigbergk <martinvonz@google.com>
parents: 33028
diff changeset
   287
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
   288
    """display version and markers contained in 'data'"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   289
    opts = pycompat.byteskwargs(opts)
33029
b482d80e041b debugcommands: pass part, not read data, into _debugobsmarker()
Martin von Zweigbergk <martinvonz@google.com>
parents: 33028
diff changeset
   290
    data = part.read()
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   291
    indent_string = ' ' * indent
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   292
    try:
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   293
        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
   294
    except error.UnknownVersion as exc:
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   295
        msg = "%sunsupported version: %s (%d bytes)\n"
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   296
        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
   297
        ui.write(msg)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   298
    else:
35144
8f6641fa7c89 py3: use '%d' for integers rather than '%s'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35059
diff changeset
   299
        msg = "%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
   300
        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
   301
        ui.write(msg)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   302
        fm = ui.formatter('debugobsolete', opts)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   303
        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
   304
            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
   305
            fm.startitem()
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   306
            fm.plain(indent_string)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   307
            cmdutil.showmarker(fm, m)
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   308
        fm.end()
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   309
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   310
def _debugphaseheads(ui, data, indent=0):
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   311
    """display version and markers contained in 'data'"""
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   312
    indent_string = ' ' * indent
34320
12c42bcd4133 phases: move the binary decoding function in the phases module
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
   313
    headsbyphase = phases.binarydecode(data)
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   314
    for phase in phases.allphases:
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   315
        for head in headsbyphase[phase]:
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   316
            ui.write(indent_string)
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   317
            ui.write('%s %s\n' % (hex(head), phases.phasenames[phase]))
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   318
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   319
def _quasirepr(thing):
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   320
    if isinstance(thing, (dict, util.sortdict, collections.OrderedDict)):
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   321
        return '{%s}' % (
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   322
            b', '.join(b'%s: %s' % (k, thing[k]) for k in sorted(thing)))
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   323
    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
   324
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   325
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
   326
    """lists the contents of a bundle2"""
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   327
    if not isinstance(gen, bundle2.unbundle20):
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   328
        raise error.Abort(_('not a bundle2 file'))
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   329
    ui.write(('Stream params: %s\n' % _quasirepr(gen.params)))
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   330
    parttypes = opts.get(r'part_type', [])
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   331
    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
   332
        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
   333
            continue
34025
626a28f30dbd debugcommands: stabilize output of debugbundle by having a custom repr
Augie Fackler <raf@durin42.com>
parents: 33553
diff changeset
   334
        ui.write('%s -- %s\n' % (part.type, _quasirepr(part.params)))
30501
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   335
        if part.type == 'changegroup':
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   336
            version = part.params.get('version', '01')
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   337
            cg = changegroup.getunbundler(version, part, 'UN')
a87e469201f9 debugcommands: move 'debugbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30402
diff changeset
   338
            _debugchangegroup(ui, cg, all=all, indent=4, **opts)
32517
b62b2b373bce debugbundle: display the content of obsmarkers parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32457
diff changeset
   339
        if part.type == 'obsmarkers':
33029
b482d80e041b debugcommands: pass part, not read data, into _debugobsmarker()
Martin von Zweigbergk <martinvonz@google.com>
parents: 33028
diff changeset
   340
            _debugobsmarkers(ui, part, indent=4, **opts)
33031
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   341
        if part.type == 'phase-heads':
e8c8d81eb864 bundle: add config option to include phases
Martin von Zweigbergk <martinvonz@google.com>
parents: 33029
diff changeset
   342
            _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
   343
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   344
@command('debugbundle',
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   345
        [('a', 'all', None, _('show all details')),
32694
3ef319e9505f debugbundle: add --part-type flag to emit only named part types
Danek Duvall <danek.duvall@oracle.com>
parents: 32626
diff changeset
   346
         ('', 'part-type', [], _('show only the named part type')),
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   347
         ('', 'spec', None, _('print the bundlespec of the bundle'))],
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   348
        _('FILE'),
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   349
        norepo=True)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   350
def debugbundle(ui, bundlepath, all=None, spec=None, **opts):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   351
    """lists the contents of a bundle"""
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   352
    with hg.openpath(ui, bundlepath) as f:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   353
        if spec:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   354
            spec = exchange.getbundlespec(ui, f)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   355
            ui.write('%s\n' % spec)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   356
            return
30502
6da030496667 debugcommands: move debug{create,apply}streambundleclone to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30501
diff changeset
   357
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   358
        gen = exchange.readbundle(ui, f, bundlepath)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   359
        if isinstance(gen, bundle2.unbundle20):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   360
            return _debugbundle2(ui, gen, all=all, **opts)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   361
        _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
   362
34959
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   363
@command('debugcapabilities',
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   364
        [], _('PATH'),
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   365
        norepo=True)
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   366
def debugcapabilities(ui, path, **opts):
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   367
    """lists the capabilities of a remote peer"""
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   368
    peer = hg.peer(ui, opts, path)
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   369
    caps = peer.capabilities()
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   370
    ui.write(('Main capabilities:\n'))
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   371
    for c in sorted(caps):
7ee2d859f720 debug: add a debugcapabilities commands
Boris Feld <boris.feld@octobus.net>
parents: 34645
diff changeset
   372
        ui.write(('  %s\n') % c)
34960
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   373
    b2caps = bundle2.bundle2caps(peer)
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   374
    if b2caps:
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   375
        ui.write(('Bundle2 capabilities:\n'))
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   376
        for key, values in sorted(b2caps.iteritems()):
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   377
            ui.write(('  %s\n') % key)
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   378
            for v in values:
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   379
                ui.write(('    %s\n') % v)
762ea8a1f5e7 debug: print parsed bundle2 capabilities with debugcapabilities
Boris Feld <boris.feld@octobus.net>
parents: 34959
diff changeset
   380
30503
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   381
@command('debugcheckstate', [], '')
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   382
def debugcheckstate(ui, repo):
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   383
    """validate the correctness of the current dirstate"""
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   384
    parent1, parent2 = repo.dirstate.parents()
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   385
    m1 = repo[parent1].manifest()
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   386
    m2 = repo[parent2].manifest()
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   387
    errors = 0
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   388
    for f in repo.dirstate:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   389
        state = repo.dirstate[f]
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   390
        if state in "nr" and f not in m1:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   391
            ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   392
            errors += 1
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   393
        if state in "a" and f in m1:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   394
            ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   395
            errors += 1
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   396
        if state in "m" and f not in m1 and f not in m2:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   397
            ui.warn(_("%s in state %s, but not in either manifest\n") %
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   398
                    (f, state))
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   399
            errors += 1
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   400
    for f in m1:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   401
        state = repo.dirstate[f]
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   402
        if state not in "nrm":
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   403
            ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   404
            errors += 1
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   405
    if errors:
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   406
        error = _(".hg/dirstate inconsistent with current parent's manifest")
6bfb333a6f2f debugcommands: move 'debugcheckstate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30502
diff changeset
   407
        raise error.Abort(error)
30504
c3bdc27121d1 debugcommands: move 'debugcommands' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30503
diff changeset
   408
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   409
@command('debugcolor',
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   410
        [('', 'style', None, _('show all configured styles'))],
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   411
        'hg debugcolor')
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   412
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
   413
    """show available color, effects or style"""
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   414
    ui.write(('color mode: %s\n') % ui._colormode)
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   415
    if opts.get(r'style'):
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   416
        return _debugdisplaystyle(ui)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   417
    else:
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   418
        return _debugdisplaycolor(ui)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   419
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   420
def _debugdisplaycolor(ui):
31121
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   421
    ui = ui.copy()
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   422
    ui._styles.clear()
31689
57a22f699179 color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents: 31634
diff changeset
   423
    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
   424
        ui._styles[effect] = effect
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   425
    if ui._terminfoparams:
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   426
        for k, v in ui.configitems('color'):
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   427
            if k.startswith('color.'):
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   428
                ui._styles[k] = k[6:]
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   429
            elif k.startswith('terminfo.'):
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   430
                ui._styles[k] = k[9:]
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   431
    ui.write(_('available colors:\n'))
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   432
    # sort label with a '_' after the other to group '_background' entry.
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   433
    items = sorted(ui._styles.items(),
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   434
                   key=lambda i: ('_' in i[0], i[0], i[1]))
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   435
    for colorname, label in items:
8fc55bbd2235 color: cleanup 'debugcolor' logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31120
diff changeset
   436
        ui.write(('%s\n') % colorname, label=label)
31120
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   437
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   438
def _debugdisplaystyle(ui):
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   439
    ui.write(_('available style:\n'))
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   440
    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
   441
    for label, effects in sorted(ui._styles.items()):
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   442
        ui.write('%s' % label, label=label)
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   443
        if effects:
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   444
            # 50
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   445
            ui.write(': ')
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   446
            ui.write(' ' * (max(0, width - len(label))))
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   447
            ui.write(', '.join(ui.label(e, e) for e in effects.split()))
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   448
        ui.write('\n')
c4e8fa2b1c40 color: move 'debugcolor' into the 'debugcommands' modules
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31074
diff changeset
   449
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   450
@command('debugcreatestreamclonebundle', [], 'FILE')
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   451
def debugcreatestreamclonebundle(ui, repo, fname):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   452
    """create a stream clone bundle file
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   453
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   454
    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
   455
    revlog files. They are commonly used for cloning very quickly.
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   456
    """
32745
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   457
    # 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
   458
    # 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
   459
    if phases.hassecret(repo):
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   460
        ui.warn(_('(warning: stream clone bundle will contain secret '
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   461
                  'revisions)\n'))
23734c0e361f debugcommands: issue warning when repo has secret changesets (issue5589)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32694
diff changeset
   462
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   463
    requirements, gen = streamclone.generatebundlev1(repo)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   464
    changegroup.writechunks(ui, gen, fname)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   465
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   466
    ui.write(_('bundle requirements: %s\n') % ', '.join(sorted(requirements)))
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   467
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   468
@command('debugdag',
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   469
    [('t', 'tags', None, _('use tags as labels')),
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   470
    ('b', 'branches', None, _('annotate with branch names')),
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   471
    ('', 'dots', None, _('use dots for runs')),
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   472
    ('s', 'spaces', None, _('separate elements by spaces'))],
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   473
    _('[OPTION]... [FILE [REV]...]'),
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   474
    optionalrepo=True)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   475
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
   476
    """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
   477
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   478
    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
   479
    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
   480
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   481
    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
   482
    """
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   483
    spaces = opts.get(r'spaces')
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   484
    dots = opts.get(r'dots')
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   485
    if file_:
31239
9cdba6072b97 vfs: use 'vfs' module directly in 'mercurial.debugcommand'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31216
diff changeset
   486
        rlog = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False),
30519
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30518
diff changeset
   487
                             file_)
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   488
        revs = set((int(r) for r in revs))
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   489
        def events():
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   490
            for r in rlog:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   491
                yield 'n', (r, list(p for p in rlog.parentrevs(r)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   492
                                        if p != -1))
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   493
                if r in revs:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   494
                    yield 'l', (r, "r%i" % r)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   495
    elif repo:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   496
        cl = repo.changelog
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   497
        tags = opts.get(r'tags')
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   498
        branches = opts.get(r'branches')
30514
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   499
        if tags:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   500
            labels = {}
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   501
            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
   502
                labels.setdefault(cl.rev(n), []).append(l)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   503
        def events():
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   504
            b = "default"
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   505
            for r in cl:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   506
                if branches:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   507
                    newb = cl.read(cl.node(r))[5]['branch']
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   508
                    if newb != b:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   509
                        yield 'a', newb
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   510
                        b = newb
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   511
                yield 'n', (r, list(p for p in cl.parentrevs(r)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   512
                                        if p != -1))
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   513
                if tags:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   514
                    ls = labels.get(r)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   515
                    if ls:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   516
                        for l in ls:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   517
                            yield 'l', (r, l)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   518
    else:
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   519
        raise error.Abort(_('need repo for changelog dag'))
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   520
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   521
    for line in dagparser.dagtextlines(events(),
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   522
                                       addspaces=spaces,
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   523
                                       wraplabels=True,
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   524
                                       wrapannotations=True,
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   525
                                       wrapnonlinear=dots,
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   526
                                       usedots=dots,
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   527
                                       maxlinewidth=70):
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   528
        ui.write(line)
625ccc95fa96 debugcommands: move 'debugdag' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30505
diff changeset
   529
        ui.write("\n")
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   530
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
   531
@command('debugdata', cmdutil.debugrevlogopts, _('-c|-m|FILE REV'))
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   532
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
   533
    """dump the contents of a data file revision"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   534
    opts = pycompat.byteskwargs(opts)
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   535
    if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   536
        if rev is not None:
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   537
            raise error.CommandError('debugdata', _('invalid arguments'))
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   538
        file_, rev = None, file_
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   539
    elif rev is None:
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   540
        raise error.CommandError('debugdata', _('invalid arguments'))
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   541
    r = cmdutil.openrevlog(repo, 'debugdata', file_, opts)
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   542
    try:
30743
2df983125d37 revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents: 30541
diff changeset
   543
        ui.write(r.revision(r.lookup(rev), raw=True))
30515
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   544
    except KeyError:
cdd1885d0f2f debugcommands: move 'debugrevlogopts' into the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30514
diff changeset
   545
        raise error.Abort(_('invalid revision identifier %s') % rev)
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   546
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   547
@command('debugdate',
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   548
    [('e', 'extended', None, _('try extended date formats'))],
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   549
    _('[-e] DATE [RANGE]'),
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   550
    norepo=True, optionalrepo=True)
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   551
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
   552
    """parse and display a date"""
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   553
    if opts[r"extended"]:
30516
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   554
        d = util.parsedate(date, util.extendeddateformats)
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   555
    else:
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   556
        d = util.parsedate(date)
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   557
    ui.write(("internal: %s %s\n") % d)
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   558
    ui.write(("standard: %s\n") % util.datestr(d))
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   559
    if range:
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   560
        m = util.matchdate(range)
ef1353c283e3 debugcommands: move 'debugdate' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30515
diff changeset
   561
        ui.write(("match: %s\n") % m(d[0]))
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   562
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   563
@command('debugdeltachain',
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
   564
    cmdutil.debugrevlogopts + cmdutil.formatteropts,
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   565
    _('-c|-m|FILE'),
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   566
    optionalrepo=True)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   567
def debugdeltachain(ui, repo, file_=None, **opts):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   568
    """dump information about delta chains in a revlog
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   569
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   570
    Output can be templatized. Available template keywords are:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   571
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   572
    :``rev``:       revision number
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   573
    :``chainid``:   delta chain identifier (numbered by unique base)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   574
    :``chainlen``:  delta chain length to this revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   575
    :``prevrev``:   previous revision in delta chain
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   576
    :``deltatype``: role of delta / how it was computed
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   577
    :``compsize``:  compressed size of revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   578
    :``uncompsize``: uncompressed size of revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   579
    :``chainsize``: total size of compressed revisions in chain
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   580
    :``chainratio``: total chain size divided by uncompressed revision size
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   581
                    (new delta chains typically start at ratio 2.00)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   582
    :``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
   583
                    of this revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   584
    :``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
   585
                    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
   586
                    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
   587
                    the delta chain for this revision
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   588
    :``extraratio``: extradist divided by chainsize; another representation of
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   589
                    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
   590
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   591
    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
   592
    are available:
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   593
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   594
    :``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
   595
                       (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
   596
    :``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
   597
    :``readdensity``:  density of useful bytes in the data read from the disk
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   598
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   599
    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
   600
    """
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   601
    opts = pycompat.byteskwargs(opts)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   602
    r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   603
    index = r.index
32315
67026d65a4fc revlog: rename constants (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
   604
    generaldelta = r.version & revlog.FLAG_GENERALDELTA
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   605
    withsparseread = getattr(r, '_withsparseread', False)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   606
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   607
    def revinfo(rev):
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   608
        e = index[rev]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   609
        compsize = e[1]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   610
        uncompsize = e[2]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   611
        chainsize = 0
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
        if generaldelta:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   614
            if e[3] == e[5]:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   615
                deltatype = 'p1'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   616
            elif e[3] == e[6]:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   617
                deltatype = 'p2'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   618
            elif e[3] == rev - 1:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   619
                deltatype = 'prev'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   620
            elif e[3] == rev:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   621
                deltatype = 'base'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   622
            else:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   623
                deltatype = 'other'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   624
        else:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   625
            if e[3] == rev:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   626
                deltatype = 'base'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   627
            else:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   628
                deltatype = 'prev'
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   629
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   630
        chain = r._deltachain(rev)[0]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   631
        for iterrev in chain:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   632
            e = index[iterrev]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   633
            chainsize += e[1]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   634
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   635
        return compsize, uncompsize, deltatype, chain, chainsize
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   636
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   637
    fm = ui.formatter('debugdeltachain', opts)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   638
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   639
    fm.plain('    rev  chain# chainlen     prev   delta       '
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   640
             'size    rawsize  chainsize     ratio   lindist extradist '
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   641
             'extraratio')
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   642
    if withsparseread:
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   643
        fm.plain('   readsize largestblk rddensity')
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   644
    fm.plain('\n')
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   645
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   646
    chainbases = {}
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   647
    for rev in r:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   648
        comp, uncomp, deltatype, chain, chainsize = revinfo(rev)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   649
        chainbase = chain[0]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   650
        chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   651
        start = r.start
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   652
        length = r.length
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   653
        basestart = start(chainbase)
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   654
        revstart = start(rev)
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   655
        lineardist = revstart + comp - basestart
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   656
        extradist = lineardist - chainsize
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   657
        try:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   658
            prevrev = chain[-2]
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   659
        except IndexError:
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   660
            prevrev = -1
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   661
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   662
        chainratio = float(chainsize) / float(uncomp)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   663
        extraratio = float(extradist) / float(chainsize)
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   664
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   665
        fm.startitem()
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   666
        fm.write('rev chainid chainlen prevrev deltatype compsize '
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   667
                 'uncompsize chainsize chainratio lindist extradist '
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   668
                 'extraratio',
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   669
                 '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f',
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   670
                 rev, chainid, len(chain), prevrev, deltatype, comp,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   671
                 uncomp, chainsize, chainratio, lineardist, extradist,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   672
                 extraratio,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   673
                 rev=rev, chainid=chainid, chainlen=len(chain),
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   674
                 prevrev=prevrev, deltatype=deltatype, compsize=comp,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   675
                 uncompsize=uncomp, chainsize=chainsize,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   676
                 chainratio=chainratio, lindist=lineardist,
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   677
                 extradist=extradist, extraratio=extraratio)
35059
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   678
        if withsparseread:
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   679
            readsize = 0
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   680
            largestblock = 0
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   681
            for revschunk in revlog._slicechunk(r, chain):
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   682
                blkend = start(revschunk[-1]) + length(revschunk[-1])
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   683
                blksize = blkend - start(revschunk[0])
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   684
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   685
                readsize += blksize
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   686
                if largestblock < blksize:
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   687
                    largestblock = blksize
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   688
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   689
            readdensity = float(chainsize) / float(readsize)
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   690
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   691
            fm.write('readsize largestblock readdensity',
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   692
                     ' %10d %10d %9.5f',
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   693
                     readsize, largestblock, readdensity,
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   694
                     readsize=readsize, largestblock=largestblock,
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   695
                     readdensity=readdensity)
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   696
5cbbef8d2a57 debugdeltachain: output information about sparse read if enabled
Paul Morelle <paul.morelle@octobus.net>
parents: 34960
diff changeset
   697
        fm.plain('\n')
30541
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   698
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   699
    fm.end()
342d0cb4f446 debugcommands: sort command order
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30529
diff changeset
   700
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   701
@command('debugdirstate|debugstate',
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   702
    [('', 'nodates', None, _('do not display the saved mtime')),
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   703
    ('', 'datesort', None, _('sort by saved mtime'))],
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   704
    _('[OPTION]...'))
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   705
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
   706
    """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
   707
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   708
    nodates = opts.get(r'nodates')
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   709
    datesort = opts.get(r'datesort')
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   710
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   711
    timestr = ""
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   712
    if datesort:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   713
        keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   714
    else:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   715
        keyfunc = None # sort by filename
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   716
    for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc):
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   717
        if ent[3] == -1:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   718
            timestr = 'unset               '
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   719
        elif nodates:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   720
            timestr = 'set                 '
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   721
        else:
35151
b45a9d121b53 py3: make sure the first argument of time.strftime() is str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35144
diff changeset
   722
            timestr = time.strftime(r"%Y-%m-%d %H:%M:%S ",
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   723
                                    time.localtime(ent[3]))
35204
d4b108fdf423 py3: use encoding.strtolocal() to convert string to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35151
diff changeset
   724
            timestr = encoding.strtolocal(timestr)
30954
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   725
        if ent[1] & 0o20000:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   726
            mode = 'lnk'
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   727
        else:
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   728
            mode = '%3o' % (ent[1] & 0o777 & ~util.umask)
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   729
        ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_))
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   730
    for f in repo.dirstate.copies():
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   731
        ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
dad968920130 debugcommands: move 'debugstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30953
diff changeset
   732
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   733
@command('debugdiscovery',
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   734
    [('', 'old', None, _('use old-style discovery')),
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   735
    ('', 'nonheads', None,
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   736
     _('use old-style discovery with non-heads included')),
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   737
    ('', 'rev', [], 'restrict discovery to this set of revs'),
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
   738
    ] + cmdutil.remoteopts,
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   739
    _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]'))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   740
def debugdiscovery(ui, repo, remoteurl="default", **opts):
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   741
    """runs the changeset discovery protocol in isolation"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   742
    opts = pycompat.byteskwargs(opts)
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   743
    remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl),
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   744
                                      opts.get('branch'))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   745
    remote = hg.peer(repo, opts, remoteurl)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   746
    ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   747
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   748
    # make sure tests are repeatable
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   749
    random.seed(12323)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   750
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   751
    def doit(pushedrevs, remoteheads, remote=remote):
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   752
        if opts.get('old'):
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   753
            if not util.safehasattr(remote, 'branches'):
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   754
                # enable in-client legacy support
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   755
                remote = localrepo.locallegacypeer(remote.local())
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   756
            common, _in, hds = treediscovery.findcommonincoming(repo, remote,
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   757
                                                                force=True)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   758
            common = set(common)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   759
            if not opts.get('nonheads'):
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   760
                ui.write(("unpruned common: %s\n") %
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   761
                         " ".join(sorted(short(n) for n in common)))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   762
                dag = dagutil.revlogdag(repo.changelog)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   763
                all = dag.ancestorset(dag.internalizeall(common))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   764
                common = dag.externalizeall(dag.headsetofconnecteds(all))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   765
        else:
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   766
            nodes = None
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   767
            if pushedrevs:
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   768
                revs = scmutil.revrange(repo, pushedrevs)
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   769
                nodes = [repo[r].node() for r in revs]
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   770
            common, any, hds = setdiscovery.findcommonheads(ui, repo, remote,
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   771
                                                            ancestorsof=nodes)
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   772
        common = set(common)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   773
        rheads = set(hds)
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   774
        lheads = set(repo.heads())
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   775
        ui.write(("common heads: %s\n") %
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   776
                 " ".join(sorted(short(n) for n in common)))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   777
        if lheads <= common:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   778
            ui.write(("local is subset\n"))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   779
        elif rheads <= common:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   780
            ui.write(("remote is subset\n"))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   781
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   782
    serverlogs = opts.get('serverlog')
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   783
    if serverlogs:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   784
        for filename in serverlogs:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   785
            with open(filename, 'r') as logfile:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   786
                line = logfile.readline()
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   787
                while line:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   788
                    parts = line.strip().split(';')
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   789
                    op = parts[1]
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   790
                    if op == 'cg':
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   791
                        pass
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   792
                    elif op == 'cgss':
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   793
                        doit(parts[2].split(' '), parts[3].split(' '))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   794
                    elif op == 'unb':
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   795
                        doit(parts[3].split(' '), parts[2].split(' '))
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   796
                    line = logfile.readline()
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   797
    else:
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   798
        remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches,
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   799
                                                 opts.get('remote_head'))
35304
f77121b6bf1b setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net>
parents: 35204
diff changeset
   800
        localrevs = opts.get('rev')
30517
a3ec6db36315 debugcommands: move 'debugdiscovery' in the module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30516
diff changeset
   801
        doit(localrevs, remoterevs)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   802
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
   803
@command('debugextensions', cmdutil.formatteropts, [], norepo=True)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   804
def debugextensions(ui, **opts):
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   805
    '''show information about active extensions'''
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   806
    opts = pycompat.byteskwargs(opts)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   807
    exts = extensions.extensions(ui)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   808
    hgver = util.version()
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   809
    fm = ui.formatter('debugextensions', opts)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   810
    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
   811
        isinternal = extensions.ismoduleinternal(extmod)
31074
2912b06905dc py3: use pycompat.fsencode() to convert __file__ to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31024
diff changeset
   812
        extsource = pycompat.fsencode(extmod.__file__)
30518
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   813
        if isinternal:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   814
            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
   815
        else:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   816
            exttestedwith = getattr(extmod, 'testedwith', '').split()
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   817
        extbuglink = getattr(extmod, 'buglink', None)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   818
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   819
        fm.startitem()
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   820
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   821
        if ui.quiet or ui.verbose:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   822
            fm.write('name', '%s\n', extname)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   823
        else:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   824
            fm.write('name', '%s', extname)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   825
            if isinternal or hgver in exttestedwith:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   826
                fm.plain('\n')
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   827
            elif not exttestedwith:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   828
                fm.plain(_(' (untested!)\n'))
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   829
            else:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   830
                lasttestedversion = exttestedwith[-1]
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   831
                fm.plain(' (%s!)\n' % lasttestedversion)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   832
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   833
        fm.condwrite(ui.verbose and extsource, 'source',
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   834
                 _('  location: %s\n'), extsource or "")
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   835
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   836
        if ui.verbose:
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   837
            fm.plain(_('  bundled: %s\n') % ['no', 'yes'][isinternal])
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   838
        fm.data(bundled=isinternal)
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   839
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   840
        fm.condwrite(ui.verbose and exttestedwith, 'testedwith',
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   841
                     _('  tested with: %s\n'),
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   842
                     fm.formatlist(exttestedwith, name='ver'))
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   843
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   844
        fm.condwrite(ui.verbose and extbuglink, 'buglink',
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   845
                 _('  bug reporting: %s\n'), extbuglink or "")
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   846
a8b17859684a debugcommands: move 'debugextensions' to the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30517
diff changeset
   847
    fm.end()
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   848
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   849
@command('debugfileset',
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   850
    [('r', 'rev', '', _('apply the filespec on this revision'), _('REV'))],
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   851
    _('[-r REV] FILESPEC'))
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   852
def debugfileset(ui, repo, expr, **opts):
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   853
    '''parse and apply a fileset specification'''
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   854
    ctx = scmutil.revsingle(repo, opts.get(r'rev'), None)
30524
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   855
    if ui.verbose:
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   856
        tree = fileset.parse(expr)
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   857
        ui.note(fileset.prettyformat(tree), "\n")
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   858
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   859
    for f in ctx.getfileset(expr):
1ee358c3ed26 debugcommands: move 'debugfileset' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30519
diff changeset
   860
        ui.write("%s\n" % f)
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   861
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   862
@command('debugformat',
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   863
         [] + cmdutil.formatteropts,
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   864
        _(''))
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   865
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
   866
    """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
   867
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   868
    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
   869
    Mercurial default."""
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   870
    maxvariantlength = max(len(fv.name) for fv in upgrade.allformatvariant)
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   871
    maxvariantlength = max(len('format-variant'), maxvariantlength)
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   872
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   873
    def makeformatname(name):
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   874
        return '%s:' + (' ' * (maxvariantlength - len(name)))
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   875
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   876
    def formatvalue(value):
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   877
        if value:
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   878
            return 'yes'
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   879
        else:
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   880
            return 'no'
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   881
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   882
    fm = ui.formatter('debugformat', opts)
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   883
    fm.plain('format-variant')
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   884
    fm.plain(' ' * (maxvariantlength - len('format-variant')))
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   885
    fm.plain(' repo')
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   886
    if ui.verbose:
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   887
        fm.plain(' config default')
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   888
    fm.plain('\n')
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   889
    fm.startitem()
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   890
    for fv in upgrade.allformatvariant:
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   891
        repovalue = fv.fromrepo(repo)
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   892
        configvalue = fv.fromconfig(repo)
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   893
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   894
        fm.write('name', makeformatname(fv.name), fv.name,
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   895
                 label='formatvariant.name')
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   896
        fm.write('repo', ' %3s', formatvalue(repovalue),
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   897
                 label='formatvariant.repo')
35337
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   898
        fm.condwrite(ui.verbose, 'config', ' %6s', formatvalue(configvalue),
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   899
                     label='formatvariant.config')
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   900
        fm.condwrite(ui.verbose, 'default', ' %7s', formatvalue(fv.default),
cfb403b92f43 debugformat: add data about the config when verbose
Boris Feld <boris.feld@octobus.net>
parents: 35336
diff changeset
   901
                     label='formatvariant.default')
35336
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   902
        fm.plain('\n')
c3e4f196b6e0 debugformat: add a 'debugformat' command
Boris Feld <boris.feld@octobus.net>
parents: 35304
diff changeset
   903
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   904
@command('debugfsinfo', [], _('[PATH]'), norepo=True)
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   905
def debugfsinfo(ui, path="."):
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   906
    """show information detected about current filesystem"""
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   907
    ui.write(('exec: %s\n') % (util.checkexec(path) and 'yes' or 'no'))
31633
5b3d55a6821f debugfsinfo: show fstype for given path
Jun Wu <quark@fb.com>
parents: 31595
diff changeset
   908
    ui.write(('fstype: %s\n') % (util.getfstype(path) or '(unknown)'))
30525
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   909
    ui.write(('symlink: %s\n') % (util.checklink(path) and 'yes' or 'no'))
86ebd2f61c31 debugcommands: move 'debugfsinfo' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30524
diff changeset
   910
    ui.write(('hardlink: %s\n') % (util.checknlink(path) and 'yes' or 'no'))
31634
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   911
    casesensitive = '(unknown)'
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   912
    try:
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   913
        with tempfile.NamedTemporaryFile(prefix='.debugfsinfo', dir=path) as f:
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   914
            casesensitive = util.fscasesensitive(f.name) and 'yes' or 'no'
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   915
    except OSError:
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   916
        pass
35738db2037a debugfsinfo: improve case-sensitive testing
Jun Wu <quark@fb.com>
parents: 31633
diff changeset
   917
    ui.write(('case-sensitive: %s\n') % casesensitive)
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   918
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   919
@command('debuggetbundle',
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   920
    [('H', 'head', [], _('id of head node'), _('ID')),
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   921
    ('C', 'common', [], _('id of common node'), _('ID')),
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   922
    ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))],
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   923
    _('REPO FILE [-H|-C ID]...'),
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   924
    norepo=True)
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   925
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
   926
    """retrieves a bundle from a repo
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   927
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   928
    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
   929
    given file.
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   930
    """
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
   931
    opts = pycompat.byteskwargs(opts)
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   932
    repo = hg.peer(ui, opts, repopath)
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   933
    if not repo.capable('getbundle'):
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   934
        raise error.Abort("getbundle() not supported by target repository")
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   935
    args = {}
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   936
    if common:
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   937
        args[r'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
   938
    if head:
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   939
        args[r'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
   940
    # TODO: get desired bundlecaps from command line.
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
   941
    args[r'bundlecaps'] = None
30526
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   942
    bundle = repo.getbundle('debug', **args)
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   943
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   944
    bundletype = opts.get('type', 'bzip2').lower()
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   945
    btypes = {'none': 'HG10UN',
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   946
              'bzip2': 'HG10BZ',
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   947
              'gzip': 'HG10GZ',
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   948
              'bundle2': 'HG20'}
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   949
    bundletype = btypes.get(bundletype)
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   950
    if bundletype not in bundle2.bundletypes:
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   951
        raise error.Abort(_('unknown bundle type specified with --type'))
9c10905f4b48 debugcommands: move 'debuggetbundle' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30525
diff changeset
   952
    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
   953
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   954
@command('debugignore', [], '[FILE]')
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   955
def debugignore(ui, repo, *files, **opts):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   956
    """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
   957
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   958
    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
   959
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   960
    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
   961
    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
   962
    """
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   963
    ignore = repo.dirstate._ignore
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   964
    if not files:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   965
        # Show all the patterns
32406
952017471f93 match: implement __repr__() and update users (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 32377
diff changeset
   966
        ui.write("%s\n" % repr(ignore))
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   967
    else:
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
   968
        m = scmutil.match(repo[None], pats=files)
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
   969
        for f in m.files():
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   970
            nf = util.normpath(f)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   971
            ignored = None
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   972
            ignoredata = None
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   973
            if nf != '.':
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   974
                if ignore(nf):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   975
                    ignored = nf
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   976
                    ignoredata = repo.dirstate._ignorefileandline(nf)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   977
                else:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   978
                    for p in util.finddirs(nf):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   979
                        if ignore(p):
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   980
                            ignored = p
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   981
                            ignoredata = repo.dirstate._ignorefileandline(p)
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   982
                            break
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   983
            if ignored:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   984
                if ignored == nf:
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
   985
                    ui.write(_("%s is ignored\n") % m.uipath(f))
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   986
                else:
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   987
                    ui.write(_("%s is ignored because of "
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   988
                               "containing folder %s\n")
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
   989
                             % (m.uipath(f), ignored))
30527
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   990
                ignorefile, lineno, line = ignoredata
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   991
                ui.write(_("(ignore rule in %s, line %d: '%s')\n")
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   992
                         % (ignorefile, lineno, line))
243ecbd4f5c9 debugcommands: move 'debugignore' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30526
diff changeset
   993
            else:
33507
e9672de52a23 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com>
parents: 33493
diff changeset
   994
                ui.write(_("%s is not ignored\n") % m.uipath(f))
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
   995
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
   996
@command('debugindex', cmdutil.debugrevlogopts +
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
   997
    [('f', 'format', 0, _('revlog format'), _('FORMAT'))],
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
   998
    _('[-f FORMAT] -c|-m|FILE'),
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
   999
    optionalrepo=True)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1000
def debugindex(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
  1001
    """dump the contents of an index file"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1002
    opts = pycompat.byteskwargs(opts)
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1003
    r = cmdutil.openrevlog(repo, 'debugindex', file_, opts)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1004
    format = opts.get('format', 0)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1005
    if format not in (0, 1):
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1006
        raise error.Abort(_("unknown format %d") % format)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1007
32315
67026d65a4fc revlog: rename constants (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
  1008
    generaldelta = r.version & revlog.FLAG_GENERALDELTA
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1009
    if generaldelta:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1010
        basehdr = ' delta'
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1011
    else:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1012
        basehdr = '  base'
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1013
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1014
    if ui.debugflag:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1015
        shortfn = hex
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1016
    else:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1017
        shortfn = short
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1018
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1019
    # There might not be anything in r, so have a sane default
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1020
    idlen = 12
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1021
    for i in r:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1022
        idlen = len(shortfn(r.node(i)))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1023
        break
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1024
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1025
    if format == 0:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1026
        ui.write(("   rev    offset  length " + basehdr + " linkrev"
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1027
                 " %s %s p2\n") % ("nodeid".ljust(idlen), "p1".ljust(idlen)))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1028
    elif format == 1:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1029
        ui.write(("   rev flag   offset   length"
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1030
                 "     size " + basehdr + "   link     p1     p2"
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1031
                 " %s\n") % "nodeid".rjust(idlen))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1032
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1033
    for i in r:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1034
        node = r.node(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1035
        if generaldelta:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1036
            base = r.deltaparent(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1037
        else:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1038
            base = r.chainbase(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1039
        if format == 0:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1040
            try:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1041
                pp = r.parents(node)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1042
            except Exception:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1043
                pp = [nullid, nullid]
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1044
            ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1045
                    i, r.start(i), r.length(i), base, r.linkrev(i),
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1046
                    shortfn(node), shortfn(pp[0]), shortfn(pp[1])))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1047
        elif format == 1:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1048
            pr = r.parentrevs(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1049
            ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % (
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1050
                    i, r.flags(i), r.start(i), r.length(i), r.rawsize(i),
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1051
                    base, r.linkrev(i), pr[0], pr[1], shortfn(node)))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1052
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  1053
@command('debugindexdot', cmdutil.debugrevlogopts,
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1054
    _('-c|-m|FILE'), optionalrepo=True)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1055
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
  1056
    """dump an index DAG as a graphviz dot file"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1057
    opts = pycompat.byteskwargs(opts)
30528
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1058
    r = cmdutil.openrevlog(repo, 'debugindexdot', file_, opts)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1059
    ui.write(("digraph G {\n"))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1060
    for i in r:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1061
        node = r.node(i)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1062
        pp = r.parents(node)
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1063
        ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1064
        if pp[1] != nullid:
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1065
            ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
22683f2f8100 debugcommands: move 'debugindex' and 'debugindexdot' in the new module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30527
diff changeset
  1066
    ui.write("}\n")
30774
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  1067
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  1068
@command('debuginstall', [] + cmdutil.formatteropts, '', norepo=True)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1069
def debuginstall(ui, **opts):
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1070
    '''test Mercurial installation
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1071
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1072
    Returns 0 on success.
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1073
    '''
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1074
    opts = 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
  1075
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1076
    def writetemp(contents):
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1077
        (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
30988
d194f0dba7ac py3: convert the mode argument of os.fdopen to unicodes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30959
diff changeset
  1078
        f = os.fdopen(fd, pycompat.sysstr("wb"))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1079
        f.write(contents)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1080
        f.close()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1081
        return name
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1082
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1083
    problems = 0
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1084
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1085
    fm = ui.formatter('debuginstall', opts)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1086
    fm.startitem()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1087
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1088
    # encoding
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1089
    fm.write('encoding', _("checking encoding (%s)...\n"), encoding.encoding)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1090
    err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1091
    try:
34129
902219a99901 debuginstall: use codecs.lookup() to detect invalid encoding
Yuya Nishihara <yuya@tcha.org>
parents: 34120
diff changeset
  1092
        codecs.lookup(pycompat.sysstr(encoding.encoding))
902219a99901 debuginstall: use codecs.lookup() to detect invalid encoding
Yuya Nishihara <yuya@tcha.org>
parents: 34120
diff changeset
  1093
    except LookupError as inst:
34130
ada8a19672ab debuginstall: do not pass exception object to formatter (issue5676)
Yuya Nishihara <yuya@tcha.org>
parents: 34129
diff changeset
  1094
        err = util.forcebytestr(inst)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1095
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1096
    fm.condwrite(err, 'encodingerror', _(" %s\n"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1097
                 " (check that your locale is properly set)\n"), err)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1098
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1099
    # Python
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1100
    fm.write('pythonexe', _("checking Python executable (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1101
             pycompat.sysexecutable)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1102
    fm.write('pythonver', _("checking Python version (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1103
             ("%d.%d.%d" % sys.version_info[:3]))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1104
    fm.write('pythonlib', _("checking Python lib (%s)...\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1105
             os.path.dirname(pycompat.fsencode(os.__file__)))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1106
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1107
    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
  1108
    if sslutil.hassni:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1109
        security.add('sni')
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1110
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1111
    fm.write('pythonsecurity', _("checking Python security support (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1112
             fm.formatlist(sorted(security), name='protocol',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1113
                           fmt='%s', sep=','))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1114
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1115
    # 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
  1116
    # may change in the future.
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1117
    if 'tls1.2' not in security:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1118
        fm.plain(_('  TLS 1.2 not supported by Python install; '
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1119
                   'network connections lack modern security\n'))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1120
    if 'sni' not in security:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1121
        fm.plain(_('  SNI not supported by Python install; may have '
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1122
                   'connectivity issues with some servers\n'))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1123
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1124
    # 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
  1125
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1126
    # hg version
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1127
    hgver = util.version()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1128
    fm.write('hgver', _("checking Mercurial version (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1129
             hgver.split('+')[0])
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1130
    fm.write('hgverextra', _("checking Mercurial custom build (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1131
             '+'.join(hgver.split('+')[1:]))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1132
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1133
    # compiled modules
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1134
    fm.write('hgmodulepolicy', _("checking module policy (%s)\n"),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1135
             policy.policy)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1136
    fm.write('hgmodules', _("checking installed modules (%s)...\n"),
31074
2912b06905dc py3: use pycompat.fsencode() to convert __file__ to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31024
diff changeset
  1137
             os.path.dirname(pycompat.fsencode(__file__)))
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1138
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1139
    if policy.policy in ('c', 'allow'):
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1140
        err = None
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1141
        try:
32367
a9c71d578a1c osutil: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 32363
diff changeset
  1142
            from .cext import (
32368
008d37c4d783 base85: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 32367
diff changeset
  1143
                base85,
32369
3b88a7fa97d8 bdiff: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 32368
diff changeset
  1144
                bdiff,
32371
151cc3b3d799 mpatch: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 32369
diff changeset
  1145
                mpatch,
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1146
                osutil,
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1147
            )
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1148
            dir(bdiff), dir(mpatch), dir(base85), dir(osutil) # quiet pyflakes
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1149
        except Exception as inst:
34130
ada8a19672ab debuginstall: do not pass exception object to formatter (issue5676)
Yuya Nishihara <yuya@tcha.org>
parents: 34129
diff changeset
  1150
            err = util.forcebytestr(inst)
32209
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1151
            problems += 1
85dc5a25f1fc debuginstall: check C extensions only if they are loadable per policy
Yuya Nishihara <yuya@tcha.org>
parents: 31864
diff changeset
  1152
        fm.condwrite(err, 'extensionserror', " %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
  1153
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1154
    compengines = util.compengines._engines.values()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1155
    fm.write('compengines', _('checking registered compression engines (%s)\n'),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1156
             fm.formatlist(sorted(e.name() for e in compengines),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1157
                           name='compengine', fmt='%s', sep=', '))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1158
    fm.write('compenginesavail', _('checking available compression engines '
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1159
                                   '(%s)\n'),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1160
             fm.formatlist(sorted(e.name() for e in compengines
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1161
                                  if e.available()),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1162
                           name='compengine', fmt='%s', sep=', '))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1163
    wirecompengines = util.compengines.supportedwireengines(util.SERVERROLE)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1164
    fm.write('compenginesserver', _('checking available compression engines '
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1165
                                    'for wire protocol (%s)\n'),
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1166
             fm.formatlist([e.name() for e in wirecompengines
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1167
                            if e.wireprotosupport()],
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1168
                           name='compengine', fmt='%s', sep=', '))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1169
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1170
    # templates
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1171
    p = templater.templatepaths()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1172
    fm.write('templatedirs', 'checking templates (%s)...\n', ' '.join(p))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1173
    fm.condwrite(not p, '', _(" no template directories found\n"))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1174
    if p:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1175
        m = templater.templatepath("map-cmdline.default")
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1176
        if m:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1177
            # 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
  1178
            err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1179
            try:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1180
                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
  1181
            except Exception as inst:
34130
ada8a19672ab debuginstall: do not pass exception object to formatter (issue5676)
Yuya Nishihara <yuya@tcha.org>
parents: 34129
diff changeset
  1182
                err = util.forcebytestr(inst)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1183
                p = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1184
            fm.condwrite(err, 'defaulttemplateerror', " %s\n", err)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1185
        else:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1186
            p = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1187
        fm.condwrite(p, 'defaulttemplate',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1188
                     _("checking default template (%s)\n"), m)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1189
        fm.condwrite(not m, 'defaulttemplatenotfound',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1190
                     _(" template '%s' not found\n"), "default")
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1191
    if not p:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1192
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1193
    fm.condwrite(not p, '',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1194
                 _(" (templates seem to have been installed incorrectly)\n"))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1195
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1196
    # editor
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1197
    editor = ui.geteditor()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1198
    editor = util.expandpath(editor)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1199
    fm.write('editor', _("checking commit editor... (%s)\n"), editor)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1200
    cmdpath = util.findexe(pycompat.shlexsplit(editor)[0])
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1201
    fm.condwrite(not cmdpath and editor == 'vi', 'vinotfound',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1202
                 _(" No commit editor set and can't find %s in PATH\n"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1203
                   " (specify a commit editor in your configuration"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1204
                   " file)\n"), not cmdpath and editor == 'vi' and editor)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1205
    fm.condwrite(not cmdpath and editor != 'vi', 'editornotfound',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1206
                 _(" Can't find editor '%s' in PATH\n"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1207
                   " (specify a commit editor in your configuration"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1208
                   " file)\n"), not cmdpath and editor)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1209
    if not cmdpath and editor != 'vi':
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1210
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1211
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1212
    # check username
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1213
    username = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1214
    err = None
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1215
    try:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1216
        username = ui.username()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1217
    except error.Abort as e:
34130
ada8a19672ab debuginstall: do not pass exception object to formatter (issue5676)
Yuya Nishihara <yuya@tcha.org>
parents: 34129
diff changeset
  1218
        err = util.forcebytestr(e)
30918
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1219
        problems += 1
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1220
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1221
    fm.condwrite(username, 'username',  _("checking username (%s)\n"), username)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1222
    fm.condwrite(err, 'usernameerror', _("checking username...\n %s\n"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1223
        " (specify a username in your configuration file)\n"), err)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1224
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1225
    fm.condwrite(not problems, '',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1226
                 _("no problems detected\n"))
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1227
    if not problems:
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1228
        fm.data(problems=problems)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1229
    fm.condwrite(problems, 'problems',
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1230
                 _("%d problems detected,"
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1231
                   " please check your install!\n"), problems)
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1232
    fm.end()
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1233
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1234
    return problems
fec3dbaa7f83 debugcommands: extract debuginstall in the debugcommands module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30775
diff changeset
  1235
30919
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1236
@command('debugknown', [], _('REPO ID...'), norepo=True)
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1237
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
  1238
    """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
  1239
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1240
    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
  1241
    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
  1242
    """
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1243
    opts = pycompat.byteskwargs(opts)
30919
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1244
    repo = hg.peer(ui, opts, repopath)
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1245
    if not repo.capable('known'):
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1246
        raise error.Abort("known() not supported by target repository")
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1247
    flags = repo.known([bin(s) for s in ids])
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1248
    ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags])))
e1fa5fe9f9d4 debugcommands: move 'debugknown' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30918
diff changeset
  1249
30935
e46533c3201e debugcommands: move 'debuglabelcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30919
diff changeset
  1250
@command('debuglabelcomplete', [], _('LABEL...'))
e46533c3201e debugcommands: move 'debuglabelcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30919
diff changeset
  1251
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
  1252
    '''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
  1253
    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
  1254
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1255
@command('debuglocks',
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1256
         [('L', 'force-lock', None, _('free the store lock (DANGEROUS)')),
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1257
          ('W', 'force-wlock', None,
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1258
           _('free the working state lock (DANGEROUS)'))],
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1259
         _('[OPTION]...'))
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1260
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
  1261
    """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
  1262
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1263
    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
  1264
    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
  1265
    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
  1266
    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
  1267
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1268
    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
  1269
    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
  1270
    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
  1271
    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
  1272
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1273
    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
  1274
    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
  1275
    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
  1276
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1277
    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
  1278
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1279
    """
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1280
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1281
    if opts.get(r'force_lock'):
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1282
        repo.svfs.unlink('lock')
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1283
    if opts.get(r'force_wlock'):
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1284
        repo.vfs.unlink('wlock')
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1285
    if opts.get(r'force_lock') or opts.get(r'force_lock'):
30938
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1286
        return 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1287
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1288
    now = time.time()
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1289
    held = 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1290
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1291
    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
  1292
        # 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
  1293
        try:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1294
            l = method(False)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1295
        except error.LockHeld:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1296
            l = None
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1297
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1298
        if l:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1299
            l.release()
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1300
        else:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1301
            try:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1302
                stat = vfs.lstat(name)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1303
                age = now - stat.st_mtime
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1304
                user = util.username(stat.st_uid)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1305
                locker = vfs.readlock(name)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1306
                if ":" in locker:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1307
                    host, pid = locker.split(':')
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1308
                    if host == socket.gethostname():
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1309
                        locker = 'user %s, process %s' % (user, pid)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1310
                    else:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1311
                        locker = 'user %s, process %s, host %s' \
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1312
                                 % (user, pid, host)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1313
                ui.write(("%-6s %s (%ds)\n") % (name + ":", locker, age))
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1314
                return 1
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1315
            except OSError as e:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1316
                if e.errno != errno.ENOENT:
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1317
                    raise
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1318
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1319
        ui.write(("%-6s free\n") % (name + ":"))
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1320
        return 0
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1321
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1322
    held += report(repo.svfs, "lock", repo.lock)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1323
    held += report(repo.vfs, "wlock", repo.wlock)
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1324
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1325
    return held
23c801570449 debugcommands: move 'debuglocks' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30937
diff changeset
  1326
30936
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1327
@command('debugmergestate', [], '')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1328
def debugmergestate(ui, repo, *args):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1329
    """print merge state
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1330
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1331
    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
  1332
    was chosen."""
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1333
    def _hashornull(h):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1334
        if h == nullhex:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1335
            return 'null'
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1336
        else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1337
            return h
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1338
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1339
    def printrecords(version):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1340
        ui.write(('* version %s records\n') % version)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1341
        if version == 1:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1342
            records = v1records
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1343
        else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1344
            records = v2records
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1345
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1346
        for rtype, record in records:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1347
            # pretty print some record types
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1348
            if rtype == 'L':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1349
                ui.write(('local: %s\n') % record)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1350
            elif rtype == 'O':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1351
                ui.write(('other: %s\n') % record)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1352
            elif rtype == 'm':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1353
                driver, mdstate = record.split('\0', 1)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1354
                ui.write(('merge driver: %s (state "%s")\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1355
                         % (driver, mdstate))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1356
            elif rtype in 'FDC':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1357
                r = record.split('\0')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1358
                f, state, hash, lfile, afile, anode, ofile = r[0:7]
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1359
                if version == 1:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1360
                    onode = 'not stored in v1 format'
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1361
                    flags = r[7]
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1362
                else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1363
                    onode, flags = r[7:9]
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1364
                ui.write(('file: %s (record type "%s", state "%s", hash %s)\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1365
                         % (f, rtype, state, _hashornull(hash)))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1366
                ui.write(('  local path: %s (flags "%s")\n') % (lfile, flags))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1367
                ui.write(('  ancestor path: %s (node %s)\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1368
                         % (afile, _hashornull(anode)))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1369
                ui.write(('  other path: %s (node %s)\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1370
                         % (ofile, _hashornull(onode)))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1371
            elif rtype == 'f':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1372
                filename, rawextras = record.split('\0', 1)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1373
                extras = rawextras.split('\0')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1374
                i = 0
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1375
                extrastrings = []
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1376
                while i < len(extras):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1377
                    extrastrings.append('%s = %s' % (extras[i], extras[i + 1]))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1378
                    i += 2
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1379
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1380
                ui.write(('file extras: %s (%s)\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1381
                         % (filename, ', '.join(extrastrings)))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1382
            elif rtype == 'l':
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1383
                labels = record.split('\0', 2)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1384
                labels = [l for l in labels if len(l) > 0]
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1385
                ui.write(('labels:\n'))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1386
                ui.write(('  local: %s\n' % labels[0]))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1387
                ui.write(('  other: %s\n' % labels[1]))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1388
                if len(labels) > 2:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1389
                    ui.write(('  base:  %s\n' % labels[2]))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1390
            else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1391
                ui.write(('unrecognized entry: %s\t%s\n')
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1392
                         % (rtype, record.replace('\0', '\t')))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1393
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1394
    # Avoid mergestate.read() since it may raise an exception for unsupported
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1395
    # merge state records. We shouldn't be doing this, but this is OK since this
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1396
    # command is pretty low-level.
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1397
    ms = mergemod.mergestate(repo)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1398
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1399
    # sort so that reasonable information is on top
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1400
    v1records = ms._readrecordsv1()
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1401
    v2records = ms._readrecordsv2()
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1402
    order = 'LOml'
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1403
    def key(r):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1404
        idx = order.find(r[0])
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1405
        if idx == -1:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1406
            return (1, r[1])
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1407
        else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1408
            return (0, idx)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1409
    v1records.sort(key=key)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1410
    v2records.sort(key=key)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1411
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1412
    if not v1records and not v2records:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1413
        ui.write(('no merge state found\n'))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1414
    elif not v2records:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1415
        ui.note(('no version 2 merge state\n'))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1416
        printrecords(1)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1417
    elif ms._v1v2match(v1records, v2records):
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1418
        ui.note(('v1 and v2 states match: using v2\n'))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1419
        printrecords(2)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1420
    else:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1421
        ui.note(('v1 and v2 states mismatch: using v1\n'))
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1422
        printrecords(1)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1423
        if ui.verbose:
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1424
            printrecords(2)
8de38479d60b debugcommands: move 'debugmergestate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30935
diff changeset
  1425
30937
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1426
@command('debugnamecomplete', [], _('NAME...'))
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1427
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
  1428
    '''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
  1429
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1430
    names = set()
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1431
    # 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
  1432
    # specially (after this for loop)
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1433
    for name, ns in repo.names.iteritems():
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1434
        if name != 'branches':
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1435
            names.update(ns.listnames(repo))
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1436
    names.update(tag for (tag, heads, tip, closed)
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1437
                 in repo.branchmap().iterbranches() if not closed)
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1438
    completions = set()
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1439
    if not args:
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1440
        args = ['']
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1441
    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
  1442
        completions.update(n for n in names if n.startswith(a))
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1443
    ui.write('\n'.join(sorted(completions)))
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1444
    ui.write('\n')
a9aa67ba3f96 debugcommands: move 'debugnamecomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30936
diff changeset
  1445
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1446
@command('debugobsolete',
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1447
        [('', 'flags', 0, _('markers flag')),
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1448
         ('', 'record-parents', False,
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1449
          _('record parent information for the precursor')),
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1450
         ('r', 'rev', [], _('display markers relevant to REV')),
32626
00a7f7b1af9c obsolete: add a function to compute "exclusive-markers" for a set of nodes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32517
diff changeset
  1451
         ('', 'exclusive', False, _('restrict display to markers only '
00a7f7b1af9c obsolete: add a function to compute "exclusive-markers" for a set of nodes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32517
diff changeset
  1452
                                    'relevant to REV')),
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1453
         ('', 'index', False, _('display index of the marker')),
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1454
         ('', 'delete', [], _('delete markers specified by indices')),
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  1455
        ] + cmdutil.commitopts2 + cmdutil.formatteropts,
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1456
         _('[OBSOLETED [REPLACEMENT ...]]'))
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1457
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
  1458
    """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
  1459
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1460
    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
  1461
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1462
    opts = pycompat.byteskwargs(opts)
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1463
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1464
    def parsenodeid(s):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1465
        try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1466
            # 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
  1467
            # 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
  1468
            # local repository.
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1469
            n = bin(s)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1470
            if len(n) != len(nullid):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1471
                raise TypeError()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1472
            return n
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1473
        except TypeError:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1474
            raise error.Abort('changeset references must be full hexadecimal '
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1475
                             'node identifiers')
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1476
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1477
    if opts.get('delete'):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1478
        indices = []
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1479
        for v in opts.get('delete'):
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1480
            try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1481
                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
  1482
            except ValueError:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1483
                raise error.Abort(_('invalid index value: %r') % v,
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1484
                                  hint=_('use integers for indices'))
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1485
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1486
        if repo.currenttransaction():
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1487
            raise error.Abort(_('cannot delete obsmarkers in the middle '
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1488
                                'of transaction.'))
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1489
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1490
        with repo.lock():
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1491
            n = repair.deleteobsmarkers(repo.obsstore, indices)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1492
            ui.write(_('deleted %i obsolescence markers\n') % n)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1493
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1494
        return
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1495
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1496
    if precursor is not None:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1497
        if opts['rev']:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1498
            raise error.Abort('cannot select revision when creating marker')
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1499
        metadata = {}
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1500
        metadata['user'] = opts['user'] or ui.username()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1501
        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
  1502
        l = repo.lock()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1503
        try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1504
            tr = repo.transaction('debugobsolete')
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1505
            try:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1506
                date = opts.get('date')
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1507
                if date:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1508
                    date = util.parsedate(date)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1509
                else:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1510
                    date = None
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1511
                prec = parsenodeid(precursor)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1512
                parents = None
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1513
                if opts['record_parents']:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1514
                    if prec not in repo.unfiltered():
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1515
                        raise error.Abort('cannot used --record-parents on '
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1516
                                         'unknown changesets')
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1517
                    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
  1518
                    parents = tuple(p.node() for p in parents)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1519
                repo.obsstore.create(tr, prec, succs, opts['flags'],
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1520
                                     parents=parents, date=date,
32411
08d02c1d7e67 devel: use default-date config field when creating obsmarkers
Boris Feld <boris.feld@octobus.net>
parents: 32406
diff changeset
  1521
                                     metadata=metadata, ui=ui)
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1522
                tr.close()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1523
            except ValueError as exc:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1524
                raise error.Abort(_('bad obsmarker input: %s') % exc)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1525
            finally:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1526
                tr.release()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1527
        finally:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1528
            l.release()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1529
    else:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1530
        if opts['rev']:
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1531
            revs = scmutil.revrange(repo, opts['rev'])
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1532
            nodes = [repo[r].node() for r in revs]
33149
a14e2e7f7d1f obsutil: move 'getmarkers' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33148
diff changeset
  1533
            markers = list(obsutil.getmarkers(repo, nodes=nodes,
32626
00a7f7b1af9c obsolete: add a function to compute "exclusive-markers" for a set of nodes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32517
diff changeset
  1534
                                               exclusive=opts['exclusive']))
30939
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1535
            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
  1536
        else:
33149
a14e2e7f7d1f obsutil: move 'getmarkers' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33148
diff changeset
  1537
            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
  1538
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1539
        markerstoiter = markers
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1540
        isrelevant = lambda m: True
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1541
        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
  1542
            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
  1543
            markerset = set(markers)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1544
            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
  1545
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1546
        fm = ui.formatter('debugobsolete', opts)
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1547
        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
  1548
            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
  1549
                # 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
  1550
                # 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
  1551
                # 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
  1552
                # 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
  1553
                # 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
  1554
                # 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
  1555
                # 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
  1556
                continue
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1557
            fm.startitem()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1558
            ind = i if opts.get('index') else None
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1559
            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
  1560
        fm.end()
9e39d196cdf5 debugcommands: move 'debugobsolete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30938
diff changeset
  1561
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1562
@command('debugpathcomplete',
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1563
         [('f', 'full', None, _('complete an entire path')),
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1564
          ('n', 'normal', None, _('show only normal files')),
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1565
          ('a', 'added', None, _('show only added files')),
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1566
          ('r', 'removed', None, _('show only removed files'))],
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1567
         _('FILESPEC...'))
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1568
def debugpathcomplete(ui, repo, *specs, **opts):
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1569
    '''complete part or all of a tracked path
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1570
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1571
    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
  1572
    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
  1573
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1574
    Completion extends only to the next path segment unless
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1575
    --full is specified, in which case entire paths are used.'''
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1576
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1577
    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
  1578
        dirstate = repo.dirstate
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1579
        spec = os.path.normpath(os.path.join(pycompat.getcwd(), path))
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1580
        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
  1581
        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
  1582
            return [], []
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1583
        if os.path.isdir(spec):
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1584
            spec += '/'
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1585
        spec = spec[len(rootdir):]
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1586
        fixpaths = pycompat.ossep != '/'
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1587
        if fixpaths:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1588
            spec = spec.replace(pycompat.ossep, '/')
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1589
        speclen = len(spec)
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1590
        fullpaths = opts[r'full']
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1591
        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
  1592
        adddir, addfile = dirs.add, files.add
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1593
        for f, st in dirstate.iteritems():
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1594
            if f.startswith(spec) and st[0] in acceptable:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1595
                if fixpaths:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1596
                    f = f.replace('/', pycompat.ossep)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1597
                if fullpaths:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1598
                    addfile(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1599
                    continue
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1600
                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
  1601
                if s >= 0:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1602
                    adddir(f[:s])
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1603
                else:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1604
                    addfile(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1605
        return files, dirs
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1606
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1607
    acceptable = ''
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1608
    if opts[r'normal']:
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1609
        acceptable += 'nm'
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1610
    if opts[r'added']:
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1611
        acceptable += 'a'
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1612
    if opts[r'removed']:
30940
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1613
        acceptable += 'r'
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1614
    cwd = repo.getcwd()
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1615
    if not specs:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1616
        specs = ['.']
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1617
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1618
    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
  1619
    for spec in specs:
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1620
        f, d = complete(spec, acceptable or 'nmar')
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1621
        files.update(f)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1622
        dirs.update(d)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1623
    files.update(dirs)
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1624
    ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files)))
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1625
    ui.write('\n')
c8081ea63591 debugcommands: move 'debugpathcomplete' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30939
diff changeset
  1626
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1627
@command('debugpickmergetool',
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1628
        [('r', 'rev', '', _('check for files in this revision'), _('REV')),
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1629
         ('', 'changedelete', None, _('emulate merging change and delete')),
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  1630
        ] + cmdutil.walkopts + cmdutil.mergetoolopts,
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1631
        _('[PATTERN]...'),
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1632
        inferrepo=True)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1633
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
  1634
    """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
  1635
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1636
    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
  1637
    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
  1638
    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
  1639
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1640
    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
  1641
    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
  1642
    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
  1643
    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
  1644
    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
  1645
    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
  1646
    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
  1647
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1648
    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
  1649
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1650
        FILE = MERGETOOL
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1651
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1652
    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
  1653
    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
  1654
    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
  1655
    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
  1656
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1657
    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
  1658
    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
  1659
    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
  1660
    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
  1661
    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
  1662
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1663
    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
  1664
    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
  1665
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1666
    - ``--tool`` option
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1667
    - ``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
  1668
    - 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
  1669
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1670
    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
  1671
    ``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
  1672
    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
  1673
    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
  1674
    """
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1675
    opts = pycompat.byteskwargs(opts)
32256
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1676
    overrides = {}
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1677
    if opts['tool']:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1678
        overrides[('ui', 'forcemerge')] = opts['tool']
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1679
        ui.note(('with --tool %r\n') % (opts['tool']))
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1680
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1681
    with ui.configoverride(overrides, 'debugmergepatterns'):
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1682
        hgmerge = encoding.environ.get("HGMERGE")
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1683
        if hgmerge is not None:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1684
            ui.note(('with HGMERGE=%r\n') % (hgmerge))
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1685
        uimerge = ui.config("ui", "merge")
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1686
        if uimerge:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1687
            ui.note(('with ui.merge=%r\n') % (uimerge))
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1688
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1689
        ctx = scmutil.revsingle(repo, opts.get('rev'))
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1690
        m = scmutil.match(ctx, pats, opts)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1691
        changedelete = opts['changedelete']
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1692
        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
  1693
            fctx = ctx[path]
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1694
            try:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1695
                if not ui.debugflag:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1696
                    ui.pushbuffer(error=True)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1697
                tool, toolpath = filemerge._picktool(repo, ui, path,
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1698
                                                     fctx.isbinary(),
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1699
                                                     'l' in fctx.flags(),
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1700
                                                     changedelete)
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1701
            finally:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1702
                if not ui.debugflag:
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1703
                    ui.popbuffer()
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1704
            ui.write(('%s = %s\n') % (path, tool))
9bc36198338e debugcommands: add debugpickmergetool to examine which merge tool is chosen
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32229
diff changeset
  1705
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1706
@command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True)
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1707
def debugpushkey(ui, repopath, namespace, *keyinfo, **opts):
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1708
    '''access the pushkey key/value protocol
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1709
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1710
    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
  1711
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1712
    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
  1713
    Reports success or failure.
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1714
    '''
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1715
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1716
    target = hg.peer(ui, {}, repopath)
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1717
    if keyinfo:
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1718
        key, old, new = keyinfo
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1719
        r = target.pushkey(namespace, key, old, new)
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1720
        ui.status(str(r) + '\n')
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1721
        return not r
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1722
    else:
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1723
        for k, v in sorted(target.listkeys(namespace).iteritems()):
31451
53865692a354 util: wrap s.encode('string_escape') call for future py3 compatibility
Yuya Nishihara <yuya@tcha.org>
parents: 31402
diff changeset
  1724
            ui.write("%s\t%s\n" % (util.escapestr(k),
53865692a354 util: wrap s.encode('string_escape') call for future py3 compatibility
Yuya Nishihara <yuya@tcha.org>
parents: 31402
diff changeset
  1725
                                   util.escapestr(v)))
30946
7103122495e2 debugcommands: move 'debugpushkey' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30940
diff changeset
  1726
30947
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1727
@command('debugpvec', [], _('A B'))
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1728
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
  1729
    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
  1730
    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
  1731
    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
  1732
    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
  1733
    if pa == pb:
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1734
        rel = "="
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1735
    elif pa > pb:
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1736
        rel = ">"
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1737
    elif pa < pb:
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1738
        rel = "<"
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1739
    elif pa | pb:
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1740
        rel = "|"
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1741
    ui.write(_("a: %s\n") % pa)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1742
    ui.write(_("b: %s\n") % pb)
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1743
    ui.write(_("depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth))
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1744
    ui.write(_("delta: %d hdist: %d distance: %d relation: %s\n") %
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1745
             (abs(pa._depth - pb._depth), pvec._hamming(pa._vec, pb._vec),
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1746
              pa.distance(pb), rel))
3c766ca89377 debugcommands: move 'debugpvec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30946
diff changeset
  1747
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1748
@command('debugrebuilddirstate|debugrebuildstate',
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1749
    [('r', 'rev', '', _('revision to rebuild to'), _('REV')),
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1750
     ('', 'minimal', None, _('only rebuild files that are inconsistent with '
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1751
                             '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
  1752
    ],
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1753
    _('[-r REV]'))
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1754
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
  1755
    """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
  1756
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1757
    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
  1758
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1759
    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
  1760
    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
  1761
    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
  1762
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1763
    ``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
  1764
    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
  1765
    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
  1766
    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
  1767
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1768
    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
  1769
    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
  1770
    """
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1771
    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
  1772
    with repo.wlock():
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1773
        dirstate = repo.dirstate
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1774
        changedfiles = None
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1775
        # See command doc for what minimal does.
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  1776
        if opts.get(r'minimal'):
30948
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1777
            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
  1778
            dirstatefiles = set(dirstate)
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1779
            manifestonly = manifestfiles - dirstatefiles
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1780
            dsonly = dirstatefiles - manifestfiles
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1781
            dsnotadded = set(f for f in dsonly if dirstate[f] != 'a')
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1782
            changedfiles = manifestonly | dsnotadded
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1783
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1784
        dirstate.rebuild(ctx.node(), ctx.manifest(), changedfiles)
cc2b537b1966 debugcommands: move 'debugrebuilddirstate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30947
diff changeset
  1785
30949
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  1786
@command('debugrebuildfncache', [], '')
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  1787
def debugrebuildfncache(ui, repo):
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  1788
    """rebuild the fncache file"""
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  1789
    repair.rebuildfncache(ui, repo)
e7d7335819f4 debugcommands: move 'debugrebuildfncache' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30948
diff changeset
  1790
30950
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1791
@command('debugrename',
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1792
    [('r', 'rev', '', _('revision to debug'), _('REV'))],
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1793
    _('[-r REV] FILE'))
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1794
def debugrename(ui, repo, file1, *pats, **opts):
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1795
    """dump rename information"""
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1796
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1797
    opts = 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
  1798
    ctx = scmutil.revsingle(repo, opts.get('rev'))
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1799
    m = scmutil.match(ctx, (file1,) + pats, opts)
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1800
    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
  1801
        fctx = ctx[abs]
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1802
        o = fctx.filelog().renamed(fctx.filenode())
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1803
        rel = m.rel(abs)
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1804
        if o:
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1805
            ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1])))
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1806
        else:
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1807
            ui.write(_("%s not renamed\n") % rel)
7236f949ce3f debugcommands: move 'debugrename' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30949
diff changeset
  1808
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  1809
@command('debugrevlog', cmdutil.debugrevlogopts +
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1810
    [('d', 'dump', False, _('dump index data'))],
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1811
    _('-c|-m|FILE'),
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1812
    optionalrepo=True)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1813
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
  1814
    """show data and statistics about a revlog"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  1815
    opts = pycompat.byteskwargs(opts)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1816
    r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1817
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1818
    if opts.get("dump"):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1819
        numrevs = len(r)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1820
        ui.write(("# rev p1rev p2rev start   end deltastart base   p1   p2"
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1821
                 " rawsize totalsize compression heads chainlen\n"))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1822
        ts = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1823
        heads = set()
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1824
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1825
        for rev in xrange(numrevs):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1826
            dbase = r.deltaparent(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1827
            if dbase == -1:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1828
                dbase = rev
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1829
            cbase = r.chainbase(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1830
            clen = r.chainlen(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1831
            p1, p2 = r.parentrevs(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1832
            rs = r.rawsize(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1833
            ts = ts + rs
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1834
            heads -= set(r.parentrevs(rev))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1835
            heads.add(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1836
            try:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1837
                compression = ts / r.end(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1838
            except ZeroDivisionError:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1839
                compression = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1840
            ui.write("%5d %5d %5d %5d %5d %10d %4d %4d %4d %7d %9d "
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1841
                     "%11d %5d %8d\n" %
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1842
                     (rev, p1, p2, r.start(rev), r.end(rev),
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1843
                      r.start(dbase), r.start(cbase),
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1844
                      r.start(p1), r.start(p2),
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1845
                      rs, ts, compression, len(heads), clen))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1846
        return 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1847
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1848
    v = r.version
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1849
    format = v & 0xFFFF
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1850
    flags = []
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1851
    gdelta = False
32315
67026d65a4fc revlog: rename constants (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
  1852
    if v & revlog.FLAG_INLINE_DATA:
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1853
        flags.append('inline')
32315
67026d65a4fc revlog: rename constants (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
  1854
    if v & revlog.FLAG_GENERALDELTA:
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1855
        gdelta = True
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1856
        flags.append('generaldelta')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1857
    if not flags:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1858
        flags = ['(none)']
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1859
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1860
    nummerges = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1861
    numfull = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1862
    numprev = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1863
    nump1 = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1864
    nump2 = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1865
    numother = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1866
    nump1prev = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1867
    nump2prev = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1868
    chainlengths = []
33057
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1869
    chainbases = []
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1870
    chainspans = []
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1871
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1872
    datasize = [None, 0, 0]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1873
    fullsize = [None, 0, 0]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1874
    deltasize = [None, 0, 0]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1875
    chunktypecounts = {}
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1876
    chunktypesizes = {}
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1877
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1878
    def addsize(size, l):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1879
        if l[0] is None or size < l[0]:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1880
            l[0] = size
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1881
        if size > l[1]:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1882
            l[1] = size
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1883
        l[2] += size
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1884
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1885
    numrevs = len(r)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1886
    for rev in xrange(numrevs):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1887
        p1, p2 = r.parentrevs(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1888
        delta = r.deltaparent(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1889
        if format > 0:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1890
            addsize(r.rawsize(rev), datasize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1891
        if p2 != nullrev:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1892
            nummerges += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1893
        size = r.length(rev)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1894
        if delta == nullrev:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1895
            chainlengths.append(0)
33057
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1896
            chainbases.append(r.start(rev))
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1897
            chainspans.append(size)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1898
            numfull += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1899
            addsize(size, fullsize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1900
        else:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1901
            chainlengths.append(chainlengths[delta] + 1)
33057
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1902
            baseaddr = chainbases[delta]
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1903
            revaddr = r.start(rev)
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1904
            chainbases.append(baseaddr)
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1905
            chainspans.append((revaddr - baseaddr) + size)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1906
            addsize(size, deltasize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1907
            if delta == rev - 1:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1908
                numprev += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1909
                if delta == p1:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1910
                    nump1prev += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1911
                elif delta == p2:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1912
                    nump2prev += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1913
            elif delta == p1:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1914
                nump1 += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1915
            elif delta == p2:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1916
                nump2 += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1917
            elif delta != nullrev:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1918
                numother += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1919
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1920
        # Obtain data on the raw chunks in the revlog.
32229
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32209
diff changeset
  1921
        segment = r._getsegmentforrevs(rev, rev)[1]
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32209
diff changeset
  1922
        if segment:
33106
2f812b0d1936 py3: pass the memoryview object into bytes() to get the value
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33102
diff changeset
  1923
            chunktype = bytes(segment[0:1])
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1924
        else:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1925
            chunktype = 'empty'
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1926
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1927
        if chunktype not in chunktypecounts:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1928
            chunktypecounts[chunktype] = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1929
            chunktypesizes[chunktype] = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1930
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1931
        chunktypecounts[chunktype] += 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1932
        chunktypesizes[chunktype] += size
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1933
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1934
    # Adjust size min value for empty cases
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1935
    for size in (datasize, fullsize, deltasize):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1936
        if size[0] is None:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1937
            size[0] = 0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1938
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1939
    numdeltas = numrevs - numfull
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1940
    numoprev = numprev - nump1prev - nump2prev
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1941
    totalrawsize = datasize[2]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1942
    datasize[2] /= numrevs
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1943
    fulltotal = fullsize[2]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1944
    fullsize[2] /= numfull
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1945
    deltatotal = deltasize[2]
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1946
    if numrevs - numfull > 0:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1947
        deltasize[2] /= numrevs - numfull
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1948
    totalsize = fulltotal + deltatotal
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1949
    avgchainlen = sum(chainlengths) / numrevs
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1950
    maxchainlen = max(chainlengths)
33057
03eefca3ed33 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33031
diff changeset
  1951
    maxchainspan = max(chainspans)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1952
    compratio = 1
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1953
    if totalsize:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1954
        compratio = totalrawsize / totalsize
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1955
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1956
    basedfmtstr = '%%%dd\n'
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1957
    basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1958
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1959
    def dfmtstr(max):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1960
        return basedfmtstr % len(str(max))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1961
    def pcfmtstr(max, padding=0):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1962
        return basepcfmtstr % (len(str(max)), ' ' * padding)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1963
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1964
    def pcfmt(value, total):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1965
        if total:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1966
            return (value, 100 * float(value) / total)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1967
        else:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1968
            return value, 100.0
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1969
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1970
    ui.write(('format : %d\n') % format)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1971
    ui.write(('flags  : %s\n') % ', '.join(flags))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1972
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1973
    ui.write('\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1974
    fmt = pcfmtstr(totalsize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1975
    fmt2 = dfmtstr(totalsize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1976
    ui.write(('revisions     : ') + fmt2 % numrevs)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1977
    ui.write(('    merges    : ') + fmt % pcfmt(nummerges, numrevs))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1978
    ui.write(('    normal    : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1979
    ui.write(('revisions     : ') + fmt2 % numrevs)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1980
    ui.write(('    full      : ') + fmt % pcfmt(numfull, numrevs))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1981
    ui.write(('    deltas    : ') + fmt % pcfmt(numdeltas, numrevs))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1982
    ui.write(('revision size : ') + fmt2 % totalsize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1983
    ui.write(('    full      : ') + fmt % pcfmt(fulltotal, totalsize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1984
    ui.write(('    deltas    : ') + fmt % pcfmt(deltatotal, totalsize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1985
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1986
    def fmtchunktype(chunktype):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1987
        if chunktype == 'empty':
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1988
            return '    %s     : ' % chunktype
33107
e88fdec9cb9e py3: use pycompat.bytestr() to convert str to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33106
diff changeset
  1989
        elif chunktype in pycompat.bytestr(string.ascii_letters):
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1990
            return '    0x%s (%s)  : ' % (hex(chunktype), chunktype)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1991
        else:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1992
            return '    0x%s      : ' % hex(chunktype)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1993
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1994
    ui.write('\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1995
    ui.write(('chunks        : ') + fmt2 % numrevs)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1996
    for chunktype in sorted(chunktypecounts):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1997
        ui.write(fmtchunktype(chunktype))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1998
        ui.write(fmt % pcfmt(chunktypecounts[chunktype], numrevs))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  1999
    ui.write(('chunks size   : ') + fmt2 % totalsize)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2000
    for chunktype in sorted(chunktypecounts):
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2001
        ui.write(fmtchunktype(chunktype))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2002
        ui.write(fmt % pcfmt(chunktypesizes[chunktype], totalsize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2003
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2004
    ui.write('\n')
33062
e21b750c9b9e debugrevlog: align chain length, reach, and compression ratio
Yuya Nishihara <yuya@tcha.org>
parents: 33057
diff changeset
  2005
    fmt = dfmtstr(max(avgchainlen, maxchainlen, maxchainspan, compratio))
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2006
    ui.write(('avg chain length  : ') + fmt % avgchainlen)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2007
    ui.write(('max chain length  : ') + fmt % maxchainlen)
33062
e21b750c9b9e debugrevlog: align chain length, reach, and compression ratio
Yuya Nishihara <yuya@tcha.org>
parents: 33057
diff changeset
  2008
    ui.write(('max chain reach   : ') + fmt % maxchainspan)
30951
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2009
    ui.write(('compression ratio : ') + fmt % compratio)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2010
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2011
    if format > 0:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2012
        ui.write('\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2013
        ui.write(('uncompressed data size (min/max/avg) : %d / %d / %d\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2014
                 % tuple(datasize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2015
    ui.write(('full revision size (min/max/avg)     : %d / %d / %d\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2016
             % tuple(fullsize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2017
    ui.write(('delta size (min/max/avg)             : %d / %d / %d\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2018
             % tuple(deltasize))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2019
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2020
    if numdeltas > 0:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2021
        ui.write('\n')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2022
        fmt = pcfmtstr(numdeltas)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2023
        fmt2 = pcfmtstr(numdeltas, 4)
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2024
        ui.write(('deltas against prev  : ') + fmt % pcfmt(numprev, numdeltas))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2025
        if numprev > 0:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2026
            ui.write(('    where prev = p1  : ') + fmt2 % pcfmt(nump1prev,
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2027
                                                              numprev))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2028
            ui.write(('    where prev = p2  : ') + fmt2 % pcfmt(nump2prev,
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2029
                                                              numprev))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2030
            ui.write(('    other            : ') + fmt2 % pcfmt(numoprev,
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2031
                                                              numprev))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2032
        if gdelta:
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2033
            ui.write(('deltas against p1    : ')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2034
                     + fmt % pcfmt(nump1, numdeltas))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2035
            ui.write(('deltas against p2    : ')
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2036
                     + fmt % pcfmt(nump2, numdeltas))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2037
            ui.write(('deltas against other : ') + fmt % pcfmt(numother,
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2038
                                                             numdeltas))
f44b96aef81b debugcommands: move 'debugrevlog' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30950
diff changeset
  2039
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2040
@command('debugrevspec',
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2041
    [('', 'optimize', None,
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2042
      _('print parsed tree after optimizing (DEPRECATED)')),
32797
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  2043
     ('', 'show-revs', True, _('print list of result revisions (default)')),
32796
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2044
     ('s', 'show-set', None, _('print internal representation of result set')),
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2045
     ('p', 'show-stage', [],
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2046
      _('print parsed tree at the given stage'), _('NAME')),
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2047
     ('', 'no-optimized', False, _('evaluate tree without optimization')),
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2048
     ('', 'verify-optimized', False, _('verify optimized result')),
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2049
     ],
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2050
    ('REVSPEC'))
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2051
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
  2052
    """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
  2053
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2054
    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
  2055
    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
  2056
32797
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  2057
    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
  2058
    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
  2059
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2060
    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
  2061
    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
  2062
    """
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  2063
    opts = pycompat.byteskwargs(opts)
33336
4672db164c98 revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents: 33274
diff changeset
  2064
    aliases = ui.configitems('revsetalias')
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2065
    stages = [
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2066
        ('parsed', lambda tree: tree),
33336
4672db164c98 revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents: 33274
diff changeset
  2067
        ('expanded', lambda tree: revsetlang.expandaliases(tree, aliases,
4672db164c98 revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents: 33274
diff changeset
  2068
                                                           ui.warn)),
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
  2069
        ('concatenated', revsetlang.foldconcat),
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
  2070
        ('analyzed', revsetlang.analyze),
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
  2071
        ('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
  2072
    ]
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2073
    if opts['no_optimized']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2074
        stages = stages[:-1]
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2075
    if opts['verify_optimized'] and opts['no_optimized']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2076
        raise error.Abort(_('cannot use --verify-optimized with '
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2077
                            '--no-optimized'))
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2078
    stagenames = set(n 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
  2079
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2080
    showalways = set()
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2081
    showchanged = set()
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2082
    if ui.verbose and not opts['show_stage']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2083
        # show parsed tree by --verbose (deprecated)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2084
        showalways.add('parsed')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2085
        showchanged.update(['expanded', 'concatenated'])
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2086
        if opts['optimize']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2087
            showalways.add('optimized')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2088
    if opts['show_stage'] and opts['optimize']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2089
        raise error.Abort(_('cannot use --optimize with --show-stage'))
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2090
    if opts['show_stage'] == ['all']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2091
        showalways.update(stagenames)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2092
    else:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2093
        for n in opts['show_stage']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2094
            if n not in stagenames:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2095
                raise error.Abort(_('invalid stage name: %s') % n)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2096
        showalways.update(opts['show_stage'])
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2097
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2098
    treebystage = {}
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2099
    printedtree = None
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
  2100
    tree = revsetlang.parse(expr, lookup=repo.__contains__)
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2101
    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
  2102
        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
  2103
        if n in showalways or (n in showchanged and tree != printedtree):
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2104
            if opts['show_stage'] or n != 'parsed':
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2105
                ui.write(("* %s:\n") % n)
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30988
diff changeset
  2106
            ui.write(revsetlang.prettyformat(tree), "\n")
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2107
            printedtree = tree
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2108
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2109
    if opts['verify_optimized']:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2110
        arevs = revset.makematcher(treebystage['analyzed'])(repo)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2111
        brevs = revset.makematcher(treebystage['optimized'])(repo)
32796
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2112
        if opts['show_set'] or (opts['show_set'] is None and ui.verbose):
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2113
            ui.write(("* analyzed set:\n"), smartset.prettyformat(arevs), "\n")
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2114
            ui.write(("* optimized set:\n"), smartset.prettyformat(brevs), "\n")
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2115
        arevs = list(arevs)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2116
        brevs = list(brevs)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2117
        if arevs == brevs:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2118
            return 0
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2119
        ui.write(('--- analyzed\n'), label='diff.file_a')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2120
        ui.write(('+++ optimized\n'), label='diff.file_b')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2121
        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
  2122
        for tag, alo, ahi, blo, bhi in sm.get_opcodes():
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2123
            if tag in ('delete', 'replace'):
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2124
                for c in arevs[alo:ahi]:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2125
                    ui.write('-%s\n' % c, label='diff.deleted')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2126
            if tag in ('insert', 'replace'):
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2127
                for c in brevs[blo:bhi]:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2128
                    ui.write('+%s\n' % c, label='diff.inserted')
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2129
            if tag == 'equal':
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2130
                for c in arevs[alo:ahi]:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2131
                    ui.write(' %s\n' % c)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2132
        return 1
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2133
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2134
    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
  2135
    revs = func(repo)
32796
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2136
    if opts['show_set'] or (opts['show_set'] is None and ui.verbose):
f78d210f599d debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org>
parents: 32745
diff changeset
  2137
        ui.write(("* set:\n"), smartset.prettyformat(revs), "\n")
32797
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  2138
    if not opts['show_revs']:
bcca357bb792 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org>
parents: 32796
diff changeset
  2139
        return
30952
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2140
    for c in revs:
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2141
        ui.write("%s\n" % c)
85c3c879c43a debugcommands: move 'debugrevspec' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30951
diff changeset
  2142
30953
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2143
@command('debugsetparents', [], _('REV1 [REV2]'))
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2144
def debugsetparents(ui, repo, rev1, rev2=None):
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2145
    """manually set the parents of the current working directory
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2146
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2147
    This is useful for writing repository conversion tools, but should
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2148
    be used with care. For example, neither the working directory nor the
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2149
    dirstate is updated, so file status may be incorrect after running this
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2150
    command.
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2151
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2152
    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
  2153
    """
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2154
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2155
    r1 = scmutil.revsingle(repo, rev1).node()
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2156
    r2 = scmutil.revsingle(repo, rev2, 'null').node()
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2157
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2158
    with repo.wlock():
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2159
        repo.setparents(r1, r2)
5b09e9bc0902 debugcommands: move 'debugsetparents' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30952
diff changeset
  2160
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
  2161
@command('debugssl', [], '[SOURCE]', optionalrepo=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
  2162
def debugssl(ui, repo, source=None, **opts):
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
  2163
    '''test a secure connection to a server
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
  2164
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
  2165
    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
  2166
    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
  2167
    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
  2168
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
  2169
    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
  2170
    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
  2171
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
  2172
    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
  2173
    of the SSL error is likely another issue.
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
  2174
    '''
34645
75979c8d4572 codemod: use pycompat.iswindows
Jun Wu <quark@fb.com>
parents: 34320
diff changeset
  2175
    if not pycompat.iswindows:
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2176
        raise error.Abort(_('certificate chain building is only possible on '
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
  2177
                            'Windows'))
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
  2178
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
  2179
    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
  2180
        if not repo:
3c3066367d72 debugssl: allow a URL to be specified without a local repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 33553
diff changeset
  2181
            raise error.Abort(_("there is no Mercurial repository here, and no "
3c3066367d72 debugssl: allow a URL to be specified without a local repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 33553
diff changeset
  2182
                                "server specified"))
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
  2183
        source = "default"
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
  2184
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
  2185
    source, branches = hg.parseurl(ui.expandpath(source))
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
  2186
    url = util.url(source)
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
  2187
    addr = None
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
  2188
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
  2189
    if url.scheme == 'https':
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
  2190
        addr = (url.host, url.port or 443)
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
  2191
    elif url.scheme == 'ssh':
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
  2192
        addr = (url.host, url.port or 22)
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
  2193
    else:
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2194
        raise error.Abort(_("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
  2195
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
  2196
    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
  2197
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
  2198
    s = ssl.wrap_socket(socket.socket(), ssl_version=ssl.PROTOCOL_TLS,
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
  2199
                        cert_reqs=ssl.CERT_NONE, ca_certs=None)
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
  2200
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
  2201
    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
  2202
        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
  2203
        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
  2204
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2205
        ui.status(_('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
  2206
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
  2207
        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
  2208
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
  2209
        if not complete:
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2210
            ui.status(_('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
  2211
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
  2212
            if not win32.checkcertificatechain(cert):
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2213
                ui.status(_('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
  2214
            else:
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2215
                ui.status(_('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
  2216
        else:
33553
9c4e2aa0a239 win32: copy-edit debugssl messages to match prevailing style
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 33507
diff changeset
  2217
            ui.status(_('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
  2218
    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
  2219
        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
  2220
30955
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2221
@command('debugsub',
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2222
    [('r', 'rev', '',
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2223
     _('revision to check'), _('REV'))],
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2224
    _('[-r REV] [REV]'))
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2225
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
  2226
    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
  2227
    for k, v in sorted(ctx.substate.items()):
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2228
        ui.write(('path %s\n') % k)
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2229
        ui.write((' source   %s\n') % v[0])
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2230
        ui.write((' revision %s\n') % v[1])
8e38fa360a12 debugcommands: move 'debugsub' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30954
diff changeset
  2231
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2232
@command('debugsuccessorssets',
33274
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  2233
    [('', 'closest', False, _('return closest successors sets only'))],
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2234
    _('[REV]'))
33274
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  2235
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
  2236
    """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
  2237
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2238
    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
  2239
    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
  2240
    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
  2241
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2242
    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
  2243
    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
  2244
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2245
    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
  2246
    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
  2247
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2248
    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
  2249
    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
  2250
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2251
    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
  2252
    "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
  2253
    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
  2254
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2255
    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
  2256
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2257
        <rev1>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2258
            <successors-1A>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2259
        <rev2>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2260
            <successors-2A>
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2261
            <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
  2262
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2263
    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
  2264
    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
  2265
    been split).
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2266
    """
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2267
    # 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
  2268
    cache = {}
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2269
    ctx2str = str
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2270
    node2str = short
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2271
    if ui.debug():
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2272
        def ctx2str(ctx):
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2273
            return ctx.hex()
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2274
        node2str = hex
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2275
    for rev in scmutil.revrange(repo, revs):
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2276
        ctx = repo[rev]
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2277
        ui.write('%s\n'% ctx2str(ctx))
33274
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  2278
        for succsset in obsutil.successorssets(repo, ctx.node(),
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  2279
                                                closest=opts['closest'],
68f3e819d41d obsolete: closest divergent support
Boris Feld <boris.feld@octobus.net>
parents: 33273
diff changeset
  2280
                                                cache=cache):
30956
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2281
            if succsset:
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2282
                ui.write('    ')
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2283
                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
  2284
                for node in succsset[1:]:
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2285
                    ui.write(' ')
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2286
                    ui.write(node2str(node))
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2287
            ui.write('\n')
db30c6bfeb70 debugcommands: move 'debugsuccessorssets' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30955
diff changeset
  2288
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2289
@command('debugtemplate',
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2290
    [('r', 'rev', [], _('apply template on changesets'), _('REV')),
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2291
     ('D', 'define', [], _('define template keyword'), _('KEY=VALUE'))],
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2292
    _('[-r REV]... [-D KEY=VALUE]... TEMPLATE'),
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2293
    optionalrepo=True)
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2294
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
  2295
    """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
  2296
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2297
    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
  2298
    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
  2299
    template.
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2300
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2301
    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
  2302
    """
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2303
    revs = None
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  2304
    if opts[r'rev']:
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2305
        if repo is None:
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2306
            raise error.RepoError(_('there is no Mercurial repository here '
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2307
                                    '(.hg not found)'))
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  2308
        revs = scmutil.revrange(repo, opts[r'rev'])
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2309
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2310
    props = {}
33101
b257aaa0743a py3: use r'' to prevent the addition of b'' by transformer
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33100
diff changeset
  2311
    for d in opts[r'define']:
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2312
        try:
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2313
            k, v = (e.strip() for e in d.split('=', 1))
31517
468bc8a1863d debugtemplate: pass ui to templater so label() works
Yuya Nishihara <yuya@tcha.org>
parents: 31451
diff changeset
  2314
            if not k or k == 'ui':
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2315
                raise ValueError
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2316
            props[k] = v
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2317
        except ValueError:
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2318
            raise error.Abort(_('malformed keyword definition: %s') % d)
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2319
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2320
    if ui.verbose:
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2321
        aliases = ui.configitems('templatealias')
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2322
        tree = templater.parse(tmpl)
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2323
        ui.note(templater.prettyformat(tree), '\n')
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2324
        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
  2325
        if newtree != tree:
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2326
            ui.note(("* expanded:\n"), templater.prettyformat(newtree), '\n')
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2327
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2328
    if revs is None:
32873
2ecce24dfcd3 templater: add simple interface for unnamed template (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32837
diff changeset
  2329
        t = formatter.maketemplater(ui, tmpl)
2ecce24dfcd3 templater: add simple interface for unnamed template (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32837
diff changeset
  2330
        props['ui'] = ui
2ecce24dfcd3 templater: add simple interface for unnamed template (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32837
diff changeset
  2331
        ui.write(t.render(props))
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2332
    else:
32837
50586a0a946f cmdutil: factor out helper to create changeset_templater with literal template
Yuya Nishihara <yuya@tcha.org>
parents: 32797
diff changeset
  2333
        displayer = cmdutil.makelogtemplater(ui, repo, tmpl)
30957
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2334
        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
  2335
            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
  2336
        displayer.close()
14794735faa8 debugcommands: move 'debugtemplate' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30956
diff changeset
  2337
32265
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  2338
@command('debugupdatecaches', [])
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  2339
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
  2340
    """warm all known caches in the repository"""
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33336
diff changeset
  2341
    with repo.wlock(), repo.lock():
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33336
diff changeset
  2342
        repo.updatecaches()
32265
ccef71de7d41 caches: introduce a 'debugupdatecaches' command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32256
diff changeset
  2343
30774
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2344
@command('debugupgraderepo', [
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2345
    ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2346
    ('', 'run', False, _('performs an upgrade')),
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2347
])
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2348
def debugupgraderepo(ui, repo, run=False, optimize=None):
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2349
    """upgrade a repository to use different features
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2350
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2351
    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
  2352
    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
  2353
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2354
    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
  2355
    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
  2356
    by the command output when run without ``--run``.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2357
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2358
    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
  2359
    allowed.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2360
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2361
    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
  2362
    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
  2363
    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
  2364
    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
  2365
    unable to access the repository should be low.
eaa5607132a2 debugcommands: stub for debugupgraderepo command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30743
diff changeset
  2366
    """
31864
70d163b86316 upgrade: extract code in its own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31689
diff changeset
  2367
    return upgrade.upgraderepo(ui, repo, run=run, optimize=optimize)
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2368
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  2369
@command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'),
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2370
         inferrepo=True)
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2371
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
  2372
    """show how files match on given patterns"""
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  2373
    opts = pycompat.byteskwargs(opts)
30958
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2374
    m = scmutil.match(repo[None], pats, opts)
32457
2def402bd16d debugwalk: also print matcher representation
Martin von Zweigbergk <martinvonz@google.com>
parents: 32411
diff changeset
  2375
    ui.write(('matcher: %r\n' % m))
32363
a275186b989a debugcommands: use repo[None].walk instead of repo.walk
Augie Fackler <augie@google.com>
parents: 32337
diff changeset
  2376
    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
  2377
    if not items:
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2378
        return
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2379
    f = lambda fn: fn
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2380
    if ui.configbool('ui', 'slash') and pycompat.ossep != '/':
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2381
        f = lambda fn: util.normpath(fn)
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2382
    fmt = 'f  %%-%ds  %%-%ds  %%s' % (
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2383
        max([len(abs) for abs in items]),
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2384
        max([len(m.rel(abs)) for abs in items]))
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2385
    for abs in items:
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2386
        line = fmt % (abs, f(m.rel(abs)), m.exact(abs) and 'exact' or '')
df73368c87c3 debugcommands: move 'debugwalk' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30957
diff changeset
  2387
        ui.write("%s\n" % line.rstrip())
30959
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2388
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2389
@command('debugwireargs',
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2390
    [('', 'three', '', 'three'),
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2391
    ('', 'four', '', 'four'),
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2392
    ('', 'five', '', 'five'),
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  2393
    ] + cmdutil.remoteopts,
30959
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2394
    _('REPO [OPTIONS]... [ONE [TWO]]'),
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2395
    norepo=True)
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2396
def debugwireargs(ui, repopath, *vals, **opts):
33100
05906b8e1d23 py3: use pycompat.byteskwargs() to convert kwargs' keys to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33062
diff changeset
  2397
    opts = pycompat.byteskwargs(opts)
30959
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2398
    repo = hg.peer(ui, opts, repopath)
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32371
diff changeset
  2399
    for opt in cmdutil.remoteopts:
30959
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2400
        del opts[opt[1]]
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2401
    args = {}
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2402
    for k, v in opts.iteritems():
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2403
        if v:
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2404
            args[k] = v
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2405
    # run twice to check that we don't mess up the stream for the next command
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2406
    res1 = repo.debugwireargs(*vals, **args)
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2407
    res2 = repo.debugwireargs(*vals, **args)
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2408
    ui.write("%s\n" % res1)
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2409
    if res1 != res2:
bd5694ce8beb debugcommands: move 'debugwireargs' in the new module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30958
diff changeset
  2410
        ui.warn("%s\n" % res2)