tests/test-symlink-placeholder.t
author Ryan McElroy <rmcelroy@fb.com>
Wed, 10 Feb 2016 09:06:08 -0800
changeset 28072 c3e9269d9602
parent 22046 7a9cbb315d84
child 38080 0a10f142299d
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:
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 19650
diff changeset
     1
#require symlink
15441
e0348815e806 tests: use 'hghave symlink' for tests using symlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 15348
diff changeset
     2
15348
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     3
Create extension that can disable symlink support:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     4
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     5
  $ cat > nolink.py <<EOF
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     6
  > from mercurial import extensions, util
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     7
  > def setflags(orig, f, l, x):
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     8
  >     pass
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     9
  > def checklink(orig, path):
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    10
  >     return False
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    11
  > def extsetup(ui):
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    12
  >     extensions.wrapfunction(util, 'setflags', setflags)
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    13
  >     extensions.wrapfunction(util, 'checklink', checklink)
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    14
  > EOF
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    15
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    16
  $ hg init unix-repo
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    17
  $ cd unix-repo
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    18
  $ echo foo > a
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    19
  $ ln -s a b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    20
  $ hg ci -Am0
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    21
  adding a
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    22
  adding b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    23
  $ cd ..
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    24
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    25
Simulate a checkout shared on NFS/Samba:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    26
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    27
  $ hg clone -q unix-repo shared
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    28
  $ cd shared
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    29
  $ rm b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    30
  $ echo foo > b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    31
  $ hg --config extensions.n=$TESTTMP/nolink.py status --debug
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    32
  ignoring suspect symlink placeholder "b"
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    33
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    34
Make a clone using placeholders:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    35
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    36
  $ hg --config extensions.n=$TESTTMP/nolink.py clone . ../win-repo
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    37
  updating to branch default
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    38
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    39
  $ cd ../win-repo
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    40
  $ cat b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    41
  a (no-eol)
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    42
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    43
19650
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    44
Empty placeholder:
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    45
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    46
  $ rm b
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    47
  $ touch b
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    48
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    49
  ignoring suspect symlink placeholder "b"
36f48c7d5944 localrepo.status: ignore empty symlink placeholders
Siddharth Agarwal <sid0@fb.com>
parents: 16913
diff changeset
    50
15348
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    51
Write binary data to the placeholder:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    52
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    53
  >>> open('b', 'w').write('this is a binary\0')
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    54
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    55
  ignoring suspect symlink placeholder "b"
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    56
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    57
Write a long string to the placeholder:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    58
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    59
  >>> open('b', 'w').write('this' * 1000)
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    60
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    61
  ignoring suspect symlink placeholder "b"
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    62
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    63
Commit shouldn't succeed:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    64
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    65
  $ hg --config extensions.n=$TESTTMP/nolink.py ci -m1
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    66
  nothing changed
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    67
  [1]
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    68
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    69
Write a valid string to the placeholder:
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    70
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    71
  >>> open('b', 'w').write('this')
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    72
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    73
  M b
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    74
  $ hg --config extensions.n=$TESTTMP/nolink.py ci -m1
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    75
  $ hg manifest tip --verbose
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    76
  644   a
c681e478c429 windows: sanity-check symlink placeholders
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    77
  644 @ b
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15441
diff changeset
    78
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15441
diff changeset
    79
  $ cd ..