view mercurial/scmwindows.py @ 39282:828a45233036

debugcommands: introduce debugrevlogindex (BC) `hg debugindex` was originally invented for displaying revlog index data and is highly tailored towards that. e.g. it accepts a --format option to display index data for a particular revlog version and displays things like offset and length. As we support non-revlog storage, it makes sense for `hg debugindex` to display generic index data and for there to exist storage-specific or storage-aware debug* commands for dumping non-generic index data. This commit effectively renames `hg debugindex` to `hg debugrevlogindex` and replaces `hg debugindex` with a version that is storage agnostic. Tests using --format have been updated to use `hg debugrevlogindex`. Output is backwards compatible. The replacement command uses the formatter, which means output can be templatized. At some point, we may want to tweak output (e.g. to add the revision size). But I don't feel like taking a bigger BC break at the moment. The renamed command/function had to be moved because check-code enforces alphabetical ordering of commands in this file. Differential Revision: https://phab.mercurial-scm.org/D4358
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 21 Aug 2018 00:01:54 +0000
parents e24802ea8dbd
children 57875cf423c9
line wrap: on
line source

from __future__ import absolute_import

import os

from . import (
    encoding,
    pycompat,
    util,
    win32,
)

try:
    import _winreg as winreg
    winreg.CloseKey
except ImportError:
    import winreg

# MS-DOS 'more' is the only pager available by default on Windows.
fallbackpager = 'more'

def systemrcpath():
    '''return default os-specific hgrc search path'''
    rcpath = []
    filename = win32.executablepath()
    # Use mercurial.ini found in directory with hg.exe
    progrc = os.path.join(os.path.dirname(filename), 'mercurial.ini')
    rcpath.append(progrc)
    # Use hgrc.d found in directory with hg.exe
    progrcd = os.path.join(os.path.dirname(filename), 'hgrc.d')
    if os.path.isdir(progrcd):
        for f, kind in util.listdir(progrcd):
            if f.endswith('.rc'):
                rcpath.append(os.path.join(progrcd, f))
    # else look for a system rcpath in the registry
    value = util.lookupreg('SOFTWARE\\Mercurial', None,
                           winreg.HKEY_LOCAL_MACHINE)
    if not isinstance(value, str) or not value:
        return rcpath
    value = util.localpath(value)
    for p in value.split(pycompat.ospathsep):
        if p.lower().endswith('mercurial.ini'):
            rcpath.append(p)
        elif os.path.isdir(p):
            for f, kind in util.listdir(p):
                if f.endswith('.rc'):
                    rcpath.append(os.path.join(p, f))
    return rcpath

def userrcpath():
    '''return os-specific hgrc search path to the user dir'''
    home = os.path.expanduser('~')
    path = [os.path.join(home, 'mercurial.ini'),
            os.path.join(home, '.hgrc')]
    userprofile = encoding.environ.get('USERPROFILE')
    if userprofile and userprofile != home:
        path.append(os.path.join(userprofile, 'mercurial.ini'))
        path.append(os.path.join(userprofile, '.hgrc'))
    return path

def termsize(ui):
    return win32.termsize()