tests/test-filebranch
author mpm@selenic.com
Sun, 21 Aug 2005 21:59:55 -0700
changeset 990 5007e0bdeed2
child 993 6f274afc05c7
permissions -rwxr-xr-x
Fix long-standing excessive file merges Since switching to the multihead approach, we've been creating excessive file-level merges where files are marked as merged with their ancestors. This explicitly checks at commit time whether the two parent versions are linearly related, and if so, reduces the file check-in to a non-merge. Then the file is compared against the remaining parent, and, if equal, skips check-in of that file (as it's not changed). Since we're not checking in all files that were different between versions, we no longer need to mark so many files for merge. This removes most of the 'm' state marking as well. Finally, it is possible to do a tree-level merge with no file-level changes. This will happen if one user changes file A and another changes file B. Thus, if we have have two parents, we allow commit to proceed even if there are no file-level changes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
990
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     1
#!/bin/sh
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     2
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     3
# This test makes sure that we don't mark a file as merged with its ancestor
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     4
# when we do a merge.
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     5
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     6
cat <<'EOF' > merge
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     7
#!/bin/sh
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     8
echo merging for `basename $1`
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
     9
EOF
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    10
chmod +x merge
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    11
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    12
echo creating base
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    13
hg init a
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    14
cd a
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    15
echo 1 > foo
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    16
echo 1 > bar
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    17
echo 1 > baz
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    18
echo 1 > quux
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    19
hg add foo bar baz quux
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    20
hg commit -m "base" -d "0 0"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    21
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    22
cd ..
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    23
hg clone a b
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    24
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    25
echo creating branch a
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    26
cd a
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    27
echo 2a > foo
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    28
echo 2a > bar
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    29
hg commit -m "branch a" -d "0 0"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    30
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    31
echo creating branch b
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    32
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    33
cd ..
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    34
cd b
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    35
echo 2b > foo
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    36
echo 2b > baz
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    37
hg commit -m "branch b" -d "0 0"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    38
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    39
echo "we shouldn't have anything but n state here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    40
hg debugstate | cut -b 1-16,35-
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    41
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    42
echo merging
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    43
hg pull ../a
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    44
env HGMERGE=../merge hg update -vm --debug
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    45
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    46
echo 2m > foo
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    47
echo 2b > baz
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    48
echo new > quux
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    49
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    50
echo "we shouldn't have anything but foo in merge state here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    51
hg debugstate | cut -b 1-16,35- | grep "^m"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    52
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    53
hg ci -m "merge" -d "0 0"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    54
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    55
echo "main: we should have a merge here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    56
hg debugindex .hg/00changelog.i
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    57
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    58
echo "foo: we should have a merge here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    59
hg debugindex .hg/data/foo.i
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    60
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    61
echo "bar: we shouldn't have a merge here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    62
hg debugindex .hg/data/bar.i
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    63
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    64
echo "baz: we shouldn't have a merge here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    65
hg debugindex .hg/data/baz.i
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    66
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    67
echo "quux: we shouldn't have a merge here"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    68
hg debugindex .hg/data/quux.i
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    69
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    70
echo "everything should be clean now"
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    71
hg status
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    72
5007e0bdeed2 Fix long-standing excessive file merges
mpm@selenic.com
parents:
diff changeset
    73
hg verify