tests/test-walkrepo.py
author Anton Shestakov <av6@dwimlabs.net>
Mon, 31 Jan 2022 18:13:00 +0300
changeset 48789 ef50a62eec40
parent 43076 2372284d9457
child 48875 6000f5b25c9b
permissions -rw-r--r--
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP If a repo is accessed via static HTTP, then we obviously can't use os.stat() to just peek at the file size. Let's download the entire file to check its size. Yes, this feels wasteful, but: 1. If we're cloning or pulling a repo from a static HTTP server, we need the contents of the obsstore anyway. 2. Implementing statichttpvfs.stat() that uses HEAD will result in one more request to a static-only HTTP server, which is already slow. Also parsing a response to a HEAD request to construct os.stat_result is pretty hacky. There's also a question of the remote server properly supporting HEAD method and reporting at least file size. 3. Implementing statichttpvfs.stat() that uses GET is pretty much the same thing as we do here, except we can't even cache the response easily, unlike simply accessing obsstore._data, which is @propertycache'd. Importing statichttprepo locally to avoid circular import. See also: 4507bc001365 and commit message of f8f2ecdde4b5. Differential Revision: https://phab.mercurial-scm.org/D12195
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
     1
from __future__ import absolute_import, print_function
27300
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     2
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
     3
import os
27300
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     4
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     5
from mercurial import (
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     6
    hg,
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     7
    scmutil,
28777
778d947f222e tests: alias ui as uimod in test-walkrepo
Yuya Nishihara <yuya@tcha.org>
parents: 28676
diff changeset
     8
    ui as uimod,
27300
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     9
    util,
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    10
)
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    11
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    12
chdir = os.chdir
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    13
mkdir = os.mkdir
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    14
pjoin = os.path.join
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    15
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    16
walkrepos = scmutil.walkrepos
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
    17
checklink = util.checklink
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    18
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28777
diff changeset
    19
u = uimod.ui.load()
37878
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    20
sym = checklink(b'.')
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    21
37878
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    22
hg.repository(u, b'top1', create=1)
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    23
mkdir(b'subdir')
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    24
chdir(b'subdir')
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    25
hg.repository(u, b'sub1', create=1)
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    26
mkdir(b'subsubdir')
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    27
chdir(b'subsubdir')
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    28
hg.repository(u, b'subsub1', create=1)
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    29
chdir(os.path.pardir)
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    30
if sym:
37878
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    31
    os.symlink(os.path.pardir, b'circle')
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    32
    os.symlink(pjoin(b'subsubdir', b'subsub1'), b'subsub1')
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    33
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    34
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    35
def runtest():
37878
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    36
    reposet = frozenset(walkrepos(b'.', followsym=True))
7494
85dc88630beb util: disable walkrepo() recursive behaviour
Patrick Mezard <pmezard@gmail.com>
parents: 7201
diff changeset
    37
    if sym and (len(reposet) != 3):
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    38
        print("reposet = %r" % (reposet,))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    39
        print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    40
            (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    41
                "Found %d repositories when I should have found 3"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    42
                % (len(reposet),)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    43
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    44
        )
7494
85dc88630beb util: disable walkrepo() recursive behaviour
Patrick Mezard <pmezard@gmail.com>
parents: 7201
diff changeset
    45
    if (not sym) and (len(reposet) != 2):
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    46
        print("reposet = %r" % (reposet,))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    47
        print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    48
            (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    49
                "Found %d repositories when I should have found 2"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    50
                % (len(reposet),)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    51
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    52
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    53
    sub1set = frozenset(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    54
        (pjoin(b'.', b'sub1'), pjoin(b'.', b'circle', b'subdir', b'sub1'))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    55
    )
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    56
    if len(sub1set & reposet) != 1:
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    57
        print("sub1set = %r" % (sub1set,))
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    58
        print("reposet = %r" % (reposet,))
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    59
        print("sub1set and reposet should have exactly one path in common.")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    60
    sub2set = frozenset(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    61
        (pjoin(b'.', b'subsub1'), pjoin(b'.', b'subsubdir', b'subsub1'))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    62
    )
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    63
    if len(sub2set & reposet) != 1:
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    64
        print("sub2set = %r" % (sub2set,))
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    65
        print("reposet = %r" % (reposet,))
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    66
        print("sub2set and reposet should have exactly one path in common.")
37878
fa2423acb02f tests: port test-walkrepo.py to Python 3
Augie Fackler <augie@google.com>
parents: 30559
diff changeset
    67
    sub3 = pjoin(b'.', b'circle', b'top1')
16686
67964cda8701 cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
    68
    if sym and sub3 not in reposet:
28676
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    69
        print("reposet = %r" % (reposet,))
a4803f35efba py3: make test-walkrepo use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27300
diff changeset
    70
        print("Symbolic links are supported and %s is not in reposet" % (sub3,))
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    71
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37878
diff changeset
    72
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    73
runtest()
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    74
if sym:
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    75
    # Simulate not having symlinks.
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    76
    del os.path.samestat
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    77
    sym = False
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    78
    runtest()