tests/bruterebase.py
author Durham Goode <durham@fb.com>
Mon, 11 Sep 2017 15:59:18 -0700
changeset 34120 c037fd655b47
parent 33734 71b77b61ed60
child 34211 bab82c43c065
permissions -rw-r--r--
ssh: fix flakey ssh errors on BSD systems There's been a persistent issue with flakiness on BSD systems (like OSX) where the 'no suitable response from remote hg' message would sometimes not appear. This was caused by one of the earlier calls failing with a "IOError: Broken pipe". Catching those errors and printing the same message removes the flakiness. Differential Revision: https://phab.mercurial-scm.org/D687
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
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    18
cmdtable = {}
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    19
command = registrar.command(cmdtable)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    20
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    21
@command('debugbruterebase')
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    22
def debugbruterebase(ui, repo, source, dest):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    23
    """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
    24
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    25
    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
    26
    """
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    27
    srevs = list(repo.revs(source))
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    28
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    29
    with repo.wlock(), repo.lock():
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    30
        repolen = len(repo)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    31
        cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    32
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    33
        def getdesc(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    34
            result = cl.changelogrevision(rev).description
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    35
            if rev >= repolen:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    36
                result += "'"
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    37
            return result
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    38
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    39
        for i in xrange(1, 2 ** len(srevs)):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    40
            subset = [rev for j, rev in enumerate(srevs) if i & (1 << j) != 0]
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    41
            spec = revsetlang.formatspec('%ld', subset)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    42
            tr = repo.transaction('rebase')
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    43
            tr.report = lambda x: 0 # hide "transaction abort"
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    44
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    45
            ui.pushbuffer()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    46
            try:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    47
                rebase.rebase(ui, repo, dest=dest, rev=[spec])
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    48
            except error.Abort as ex:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    49
                summary = 'ABORT: %s' % ex
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    50
            except Exception as ex:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    51
                summary = 'CRASH: %s' % ex
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    52
            else:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    53
                # short summary about new nodes
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    54
                cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    55
                descs = []
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    56
                for rev in xrange(repolen, len(repo)):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    57
                    desc = '%s:' % getdesc(rev)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    58
                    for prev in cl.parentrevs(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    59
                        if prev > -1:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    60
                            desc += getdesc(prev)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    61
                    descs.append(desc)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    62
                descs.sort()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    63
                summary = ' '.join(descs)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    64
            ui.popbuffer()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    65
            repo.vfs.tryunlink('rebasestate')
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    66
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    67
            subsetdesc = ''.join(getdesc(rev) for rev in subset)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    68
            ui.write(('%s: %s\n') % (subsetdesc.rjust(len(srevs)), summary))
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
    69
            tr.abort()