tests/test-walkrepo.py
author Ryan McElroy <rmcelroy@fb.com>
Wed, 10 Feb 2016 09:06:08 -0800
changeset 28072 c3e9269d9602
parent 27300 a8b2bf520a2a
child 28676 a4803f35efba
permissions -rw-r--r--
merge: minimize conflicts when common base is not shown (issue4447) Previously, two changes that were nearly, but not quite, identical would result in large merge conflict regions that looked very similar, and were thus very confusing to users, and lead people used to other source control systems to claim that "mercurial's merge algorithms suck". In the relatively common case of a new file being introduced in two branches with very slight modifications, the old behavior would show the entire file as a conflict, and it would be very difficult for a user to determine what was going on. In the past, mercurial attempted to solve this with a "very smart" algorithm that would find all common lines, but this has significant problems as described in 2ea6d906cf9b. Instead, we use a "very dumb" algorithm introduced in the previous patch that simply matches lines at the periphery of conflict regions. This minimizes most conflict regions well, though there may still be some degenerate edge cases, like small modification to the beginning and end of a large file.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27300
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     1
from __future__ import absolute_import
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,
a8b2bf520a2a tests: use absolute_import in test-walkrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23532
diff changeset
     8
    ui,
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
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    19
u = ui.ui()
16321
e1615a24b73a tests: make test-walkrepo use hg's symlink test
Matt Mackall <mpm@selenic.com>
parents: 14971
diff changeset
    20
sym = checklink('.')
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    21
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    22
hg.repository(u, 'top1', create=1)
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    23
mkdir('subdir')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    24
chdir('subdir')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    25
hg.repository(u, 'sub1', create=1)
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    26
mkdir('subsubdir')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    27
chdir('subsubdir')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    28
hg.repository(u, 'subsub1', create=1)
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:
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    31
    os.symlink(os.path.pardir, 'circle')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    32
    os.symlink(pjoin('subsubdir', 'subsub1'), 'subsub1')
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    33
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    34
def runtest():
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    35
    reposet = frozenset(walkrepos('.', followsym=True))
7494
85dc88630beb util: disable walkrepo() recursive behaviour
Patrick Mezard <pmezard@gmail.com>
parents: 7201
diff changeset
    36
    if sym and (len(reposet) != 3):
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    37
        print "reposet = %r" % (reposet,)
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16321
diff changeset
    38
        print ("Found %d repositories when I should have found 3"
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16321
diff changeset
    39
               % (len(reposet),))
7494
85dc88630beb util: disable walkrepo() recursive behaviour
Patrick Mezard <pmezard@gmail.com>
parents: 7201
diff changeset
    40
    if (not sym) and (len(reposet) != 2):
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    41
        print "reposet = %r" % (reposet,)
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16321
diff changeset
    42
        print ("Found %d repositories when I should have found 2"
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16321
diff changeset
    43
               % (len(reposet),))
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    44
    sub1set = frozenset((pjoin('.', 'sub1'),
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    45
                         pjoin('.', 'circle', 'subdir', 'sub1')))
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    46
    if len(sub1set & reposet) != 1:
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    47
        print "sub1set = %r" % (sub1set,)
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    48
        print "reposet = %r" % (reposet,)
7492
8649b2a3de75 tests: test-walkrepo shouldn't throw SystemExit
Benoit Allard <benoit@aeteurope.nl>
parents: 7201
diff changeset
    49
        print "sub1set and reposet should have exactly one path in common."
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    50
    sub2set = frozenset((pjoin('.', 'subsub1'),
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    51
                         pjoin('.', 'subsubdir', 'subsub1')))
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    52
    if len(sub2set & reposet) != 1:
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    53
        print "sub2set = %r" % (sub2set,)
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    54
        print "reposet = %r" % (reposet,)
23532
fad896292e7d tests: fix a typo in test-walkrepos.py
Enrique A. Tobis <enrique@tobis.com.ar>
parents: 16686
diff changeset
    55
        print "sub2set and reposet should have exactly one path in common."
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    56
    sub3 = pjoin('.', 'circle', 'top1')
16686
67964cda8701 cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
    57
    if sym and sub3 not in reposet:
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    58
        print "reposet = %r" % (reposet,)
7492
8649b2a3de75 tests: test-walkrepo shouldn't throw SystemExit
Benoit Allard <benoit@aeteurope.nl>
parents: 7201
diff changeset
    59
        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
    60
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    61
runtest()
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    62
if sym:
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    63
    # Simulate not having symlinks.
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    64
    del os.path.samestat
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    65
    sym = False
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    66
    runtest()