tests/bruterebase.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 17 Feb 2018 11:19:52 -0700
changeset 36481 1fa35ca345a5
parent 34211 bab82c43c065
child 36509 3b98ffd2dde3
permissions -rw-r--r--
internals: document bundle2 format It seems like a good idea to have thorough documentation of the bundle2 data format, including the format of each part and the capabilities. The added documentation is far from complete. For example, we don't fully capture the semantics of each capability and part. But a start is better than nothing, which was pretty much where we were before. Differential Revision: https://phab.mercurial-scm.org/D2298
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     1
# bruterebase.py - brute force rebase testing
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     2
#
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     3
# Copyright 2017 Facebook, Inc.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     4
#
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     7
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     8
from __future__ import absolute_import
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
     9
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    10
from mercurial import (
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    11
    error,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    12
    registrar,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    13
    revsetlang,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    14
)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    15
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    16
from hgext import rebase
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    17
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    18
try:
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    19
    xrange
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    20
except NameError:
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    21
    xrange = range
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    22
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    23
cmdtable = {}
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    24
command = registrar.command(cmdtable)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    25
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    26
@command(b'debugbruterebase')
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    27
def debugbruterebase(ui, repo, source, dest):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    28
    """for every non-empty subset of source, run rebase -r subset -d dest
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    29
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    30
    Print one line summary for each subset. Assume obsstore is enabled.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    31
    """
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    32
    srevs = list(repo.revs(source))
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    33
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    34
    with repo.wlock(), repo.lock():
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    35
        repolen = len(repo)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    36
        cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    37
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    38
        def getdesc(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    39
            result = cl.changelogrevision(rev).description
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    40
            if rev >= repolen:
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    41
                result += b"'"
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    42
            return result
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    43
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    44
        for i in xrange(1, 2 ** len(srevs)):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    45
            subset = [rev for j, rev in enumerate(srevs) if i & (1 << j) != 0]
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    46
            spec = revsetlang.formatspec(b'%ld', subset)
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    47
            tr = repo.transaction(b'rebase')
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    48
            tr.report = lambda x: 0 # hide "transaction abort"
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    49
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    50
            ui.pushbuffer()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    51
            try:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    52
                rebase.rebase(ui, repo, dest=dest, rev=[spec])
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    53
            except error.Abort as ex:
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    54
                summary = b'ABORT: %s' % ex
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    55
            except Exception as ex:
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    56
                summary = b'CRASH: %s' % ex
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    57
            else:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    58
                # short summary about new nodes
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    59
                cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    60
                descs = []
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    61
                for rev in xrange(repolen, len(repo)):
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    62
                    desc = b'%s:' % getdesc(rev)
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    63
                    for prev in cl.parentrevs(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    64
                        if prev > -1:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    65
                            desc += getdesc(prev)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    66
                    descs.append(desc)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    67
                descs.sort()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    68
                summary = ' '.join(descs)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    69
            ui.popbuffer()
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    70
            repo.vfs.tryunlink(b'rebasestate')
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    71
34211
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    72
            subsetdesc = b''.join(getdesc(rev) for rev in subset)
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33734
diff changeset
    73
            ui.write((b'%s: %s\n') % (subsetdesc.rjust(len(srevs)), summary))
33734
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    74
            tr.abort()