tests/artifacts/scripts/generate-churning-bundle.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 04 Dec 2024 10:34:17 +0100
changeset 52438 9feb175c028d
parent 52437 e26b738430a1
child 52439 83f87912c5e0
permissions -rwxr-xr-x
test-sparse-revlog: build the content directly in memory We now do our own merge so that we now have the graph and the content fully defined. Which will help to speed up the generation soon. The generation jump through a few hoops to avoid consuming 700MB of memory at run time.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45830
c102b704edb5 global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43110
diff changeset
     1
#!/usr/bin/env python3
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     2
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     3
# generate-branchy-bundle - generate a branch for a "large" branchy repository
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     4
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     5
# Copyright 2018 Octobus, contact@octobus.net
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     6
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     7
# This software may be used and distributed according to the terms of the
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     8
# GNU General Public License version 2 or any later version.
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     9
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    10
# This script generates a repository suitable for testing delta computation
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    11
# strategies.
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    12
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    13
# The repository update a single "large" file with many updates. One fixed part
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    14
# of the files always get updated while the rest of the lines get updated over
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    15
# time. This update happens over many topological branches, some getting merged
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    16
# back.
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    17
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    18
# Running with `chg` in your path and `CHGHG` set is recommended for speed.
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    19
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    20
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    21
import hashlib
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    22
import os
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    23
import shutil
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    24
import subprocess
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    25
import sys
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    26
import tempfile
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    27
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    28
BUNDLE_NAME = 'big-file-churn.hg'
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    29
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    30
# constants for generating the repository
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    31
NB_CHANGESET = 5000
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    32
PERIOD_MERGING = 8
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    33
PERIOD_BRANCHING = 7
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    34
MOVE_BACK_MIN = 3
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    35
MOVE_BACK_RANGE = 5
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    36
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    37
# constants for generating the large file we keep updating
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    38
#
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    39
# At each revision, the beginning on the file change,
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    40
# and set of other lines changes too.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
    41
FILENAME = 'SPARSE-REVLOG-TEST-FILE'
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    42
NB_LINES = 10500
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    43
ALWAYS_CHANGE_LINES = 500
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    44
OTHER_CHANGES = 300
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    45
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
    46
52437
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    47
def build_graph():
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    48
    heads = {0}
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    49
    graph = {0: (None, None)}
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    50
    for idx in range(1, NB_CHANGESET + 1):
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    51
        p, _ = parents = [idx - 1, None]
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    52
        if (idx % PERIOD_BRANCHING) == 0:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    53
            back = MOVE_BACK_MIN + (idx % MOVE_BACK_RANGE)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    54
            for _ in range(back):
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    55
                p = graph.get(p, (p,))[0]
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    56
                parents[0] = p
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    57
        if (idx % PERIOD_MERGING) == 0:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    58
            parents[1] = min(heads)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    59
        for p in parents:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    60
            heads.discard(p)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    61
        heads.add(idx)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    62
        graph[idx] = tuple(parents)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    63
    return graph
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    64
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    65
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    66
GRAPH = build_graph()
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    67
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    68
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    69
def nextcontent(previous_content):
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    70
    """utility to produce a new file content from the previous one"""
51274
d7155949535e generate-churning-bundle: fix script for python3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
    71
    return hashlib.md5(previous_content).hexdigest().encode('ascii')
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    72
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
    73
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    74
def filecontent(iteridx, oldcontent):
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    75
    """generate a new file content
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    76
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    77
    The content is generated according the iteration index and previous
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    78
    content"""
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    79
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    80
    # initial call
52437
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
    81
    if iteridx == 0:
51274
d7155949535e generate-churning-bundle: fix script for python3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
    82
        current = b''
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    83
    else:
51274
d7155949535e generate-churning-bundle: fix script for python3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
    84
        current = b"%d" % iteridx
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    85
43110
1fcf79e9943a tests: use range() in generate-churning-module.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43076
diff changeset
    86
    for idx in range(NB_LINES):
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    87
        do_change_line = True
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    88
        if oldcontent is not None and ALWAYS_CHANGE_LINES < idx:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    89
            do_change_line = not ((idx - iteridx) % OTHER_CHANGES)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    90
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    91
        if do_change_line:
51274
d7155949535e generate-churning-bundle: fix script for python3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
    92
            to_write = current + b'\n'
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    93
            current = nextcontent(current)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    94
        else:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    95
            to_write = oldcontent[idx]
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    96
        yield to_write
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    97
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
    98
52438
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
    99
def merge_content(base, left, right):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   100
    """merge two file content to produce a new one
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   101
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   102
    use unambiguous update on each side when possible, and produce a new line
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   103
    whenever a merge is needed. Similar to what the manifest would do.
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   104
    """
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   105
    for old, left, right in zip(base, left, right):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   106
        if old == left and old == right:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   107
            yield old
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   108
        elif old == left and old != right:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   109
            yield right
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   110
        elif old != left and old == right:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   111
            yield left
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   112
        else:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   113
            yield nextcontent(left + right)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   114
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   115
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   116
def ancestors(graph, rev):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   117
    """return the set of ancestors of revision <rev>"""
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   118
    to_proceed = {rev}
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   119
    seen = set(to_proceed)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   120
    while to_proceed:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   121
        current = to_proceed.pop()
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   122
        for p in graph[current]:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   123
            if p is None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   124
                continue
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   125
            if p in seen:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   126
                continue
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   127
            to_proceed.add(p)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   128
            seen.add(p)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   129
    return seen
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   130
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   131
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   132
def gca(graph, left, right):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   133
    """find the greater common ancestors of left and right
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   134
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   135
    Note that the algorithm is stupid and N² when run on all merge, however
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   136
    this should not be a too much issue given the current scale.
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   137
    """
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   138
    return max(ancestors(graph, left) & ancestors(graph, right))
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   139
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   140
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   141
def make_one_content_fn(idx, base, left, right):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   142
    """build a function that build the content on demand
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   143
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   144
    The dependency are kept are reference to make sure they are not
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   145
    garbage-collected until we use them. Once we computed the current content,
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   146
    we make sure to drop their reference to allow them to be garbage collected.
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   147
    """
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   148
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   149
    def content_fn(idx=idx, base=base, left=left, right=right):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   150
        if left is None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   151
            new = filecontent(idx, None)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   152
        elif base is None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   153
            new = filecontent(idx, left())
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   154
        else:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   155
            merged = merge_content(base(), left(), right())
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   156
            new = filecontent(idx, list(merged))
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   157
        return list(new)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   158
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   159
    del idx
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   160
    del base
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   161
    del left
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   162
    del right
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   163
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   164
    value = None
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   165
    cf = [content_fn]
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   166
    del content_fn
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   167
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   168
    def final_fn():
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   169
        nonlocal value
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   170
        if value is None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   171
            content_fn = cf.pop()
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   172
            value = list(content_fn())
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   173
            del content_fn
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   174
        return value
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   175
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   176
    return final_fn
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   177
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   178
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   179
def build_content_graph(graph):
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   180
    """produce file content for all revision
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   181
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   182
    The content will be generated on demande and cached. Cleanup the
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   183
    dictionnary are you use it to reduce memory usage.
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   184
    """
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   185
    content = {}
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   186
    for idx, (p1, p2) in graph.items():
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   187
        base = left = right = None
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   188
        if p1 is not None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   189
            left = content[p1]
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   190
            if p2 is not None:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   191
                right = content[p2]
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   192
                base_rev = gca(graph, p1, p2)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   193
                base = content[base_rev]
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   194
        content[idx] = make_one_content_fn(idx, base, left, right)
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   195
    return content
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   196
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   197
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   198
CONTENT = build_content_graph(GRAPH)
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   199
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
   200
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   201
def hg(command, *args):
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   202
    """call a mercurial command with appropriate config and argument"""
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   203
    env = os.environ.copy()
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   204
    if 'CHGHG' in env:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   205
        full_cmd = ['chg']
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   206
    else:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   207
        full_cmd = ['hg']
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   208
    full_cmd.append('--quiet')
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   209
    full_cmd.append(command)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   210
    if command == 'commit':
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   211
        # reproducible commit metadata
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   212
        full_cmd.extend(['--date', '0 0', '--user', 'test'])
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   213
    elif command == 'merge':
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   214
        # avoid conflicts by picking the local variant
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   215
        full_cmd.extend(['--tool', ':merge-local'])
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   216
    full_cmd.extend(args)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   217
    env['HGRCPATH'] = ''
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   218
    return subprocess.check_call(full_cmd, env=env)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   219
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
   220
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   221
def run(target):
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   222
    tmpdir = tempfile.mkdtemp(prefix='tmp-hg-test-big-file-bundle-')
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   223
    try:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   224
        os.chdir(tmpdir)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   225
        hg('init')
52437
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   226
        for idx, (p1, p2) in GRAPH.items():
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   227
            if sys.stdout.isatty():
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   228
                print("generating commit #%d/%d" % (idx, NB_CHANGESET))
52437
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   229
            if p1 is not None and p1 != idx - 1:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   230
                hg('update', "%d" % p1)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   231
            if p2 is not None:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   232
                hg('merge', "%d" % p2)
52438
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   233
            with open(FILENAME, 'wb') as f:
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   234
                # pop the value to let it be garbage collection eventually.
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   235
                for line in CONTENT.pop(idx)():
9feb175c028d test-sparse-revlog: build the content directly in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52437
diff changeset
   236
                    f.write(line)
52437
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   237
            if idx == 0:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   238
                hg('add', FILENAME)
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   239
                hg('commit', '--addremove', '--message', 'initial commit')
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   240
            else:
e26b738430a1 test-sparse-revlog: pre-generate the graph structure in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52436
diff changeset
   241
                hg('commit', '--message', 'commit #%d' % idx)
41795
b59676077654 test: stabilize bundle generation for test-sparse-revlog.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39491
diff changeset
   242
        hg('bundle', '--all', target, '--config', 'devel.bundle.delta=p1')
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   243
        with open(target, 'rb') as bundle:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   244
            data = bundle.read()
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   245
            digest = hashlib.md5(data).hexdigest()
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   246
        with open(target + '.md5', 'wb') as md5file:
51274
d7155949535e generate-churning-bundle: fix script for python3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
   247
            md5file.write(digest.encode('ascii') + b'\n')
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   248
        if sys.stdout.isatty():
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   249
            print('bundle generated at "%s" md5: %s' % (target, digest))
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   250
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   251
    finally:
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   252
        shutil.rmtree(tmpdir)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   253
    return 0
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   254
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41800
diff changeset
   255
39491
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   256
if __name__ == '__main__':
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   257
    orig = os.path.realpath(os.path.dirname(sys.argv[0]))
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   258
    target = os.path.join(orig, os.pardir, 'cache', BUNDLE_NAME)
4ca7a67c94c8 sparse-revlog: add a test checking revlog deltas for a churning file
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   259
    sys.exit(run(target))