tests/test-rename-merge2
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Sat, 09 Jun 2007 01:04:28 -0300
changeset 4531 b51a8138292a
parent 4296 c2c8491a30d6
child 4659 7a7d4937272b
permissions -rwxr-xr-x
Avoid extra filelogs entries. Right now, there are some situations in which localrepo.filecommit can create filelog entries even though they're not needed. For example: - permissions for a file have changed; - qrefresh can create a filelog entry identical to its parent (see the added test); - convert-repo creates extra filelog entries in every merge where the first parent has added files (for example, changeset ebebe9577a1a of the kernel repo added extra filelog entries to files in the arch/blackfin directory, even though the merge should only touch the drivers/ata directory). This makes "hg log file" in a converted repo less useful than it could be, since it may mention many merges that don't actually touch that specific file. They all come from the same basic problem: localrepo.commit (through filecommit) creates new filelog entries for all files passed to it (except for some cases during a merge). Patch and test case provided by Benoit. This should fix issue351.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3280
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     1
#!/bin/sh
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     2
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     3
mkdir -p t
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     4
cd t
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     5
4296
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
     6
cat <<EOF > merge
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
     7
import sys, os
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
     8
f = open(sys.argv[1], "wb")
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
     9
f.write("merge %s %s %s" % (sys.argv[1], sys.argv[2], sys.argv[3]))
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
    10
f.close()
3280
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    11
EOF
4296
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
    12
HGMERGE="python ../merge"; export HGMERGE
3280
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    13
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    14
# perform a test merge with possible renaming
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    15
# 
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    16
# args:
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    17
# $1 = action in local branch
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    18
# $2 = action in remote branch
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    19
# $3 = action in working dir
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    20
# $4 = expected result
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    21
tm()
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    22
{
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    23
    mkdir t
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    24
    cd t
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    25
    hg init
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    26
    echo "[merge]" >> .hg/hgrc
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    27
    echo "followcopies = 1" >> .hg/hgrc
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    28
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    29
    # base
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    30
    echo base > a
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    31
    echo base > rev # used to force commits
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    32
    hg add a rev
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    33
    hg ci -m "base" -d "0 0"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    34
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    35
    # remote
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    36
    echo remote > rev
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    37
    if [ "$2" != "" ] ; then $2 ; fi
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    38
    hg ci -m "remote" -d "0 0"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    39
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    40
    # local
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    41
    hg co -q 0
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    42
    echo local > rev
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    43
    if [ "$1" != "" ] ; then $1 ; fi
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    44
    hg ci -m "local" -d "0 0"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    45
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    46
    # working dir
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    47
    echo local > rev
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    48
    if [ "$3" != "" ] ; then $3 ; fi
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    49
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    50
    # merge
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    51
    echo "--------------"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    52
    echo "test L:$1 R:$2 W:$3 - $4"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    53
    echo "--------------"
4296
c2c8491a30d6 test-rename-merge2: avoid a shell script
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3988
diff changeset
    54
    hg merge -y --debug --traceback
3280
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    55
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    56
    echo "--------------"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    57
    hg status -camC -X rev
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    58
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    59
    hg ci -m "merge" -d "0 0"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    60
    
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    61
    echo "--------------"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    62
    echo
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    63
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    64
    cd ..
3988
9dcf9d45cab8 Don't use -f for rm in tests where not needed. Drop /bin/ from /bin/rm.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3288
diff changeset
    65
    rm -r t
3280
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    66
}
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    67
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    68
up() { 
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    69
    cp rev $1
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    70
    hg add $1 2> /dev/null
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    71
    if [ "$2" != "" ] ; then 
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    72
	cp rev $2
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    73
	hg add $2 2> /dev/null
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    74
    fi
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    75
}
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    76
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    77
uc() { up $1; hg cp $1 $2; } # update + copy
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    78
um() { up $1; hg mv $1 $2; }
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    79
nc() { hg cp $1 $2; } # just copy
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    80
nm() { hg mv $1 $2; } # just move
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    81
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    82
tm "up a  " "nc a b" "      " "1  get local a to b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    83
tm "nc a b" "up a  " "      " "2  get rem change to a and b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    84
tm "up a  " "nm a b" "      " "3  get local a change to b, remove a"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    85
tm "nm a b" "up a  " "      " "4  get remote change to b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    86
tm "      " "nc a b" "      " "5  get b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    87
tm "nc a b" "      " "      " "6  nothing"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    88
tm "      " "nm a b" "      " "7  get b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    89
tm "nm a b" "      " "      " "8  nothing"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    90
tm "um a b" "um a b" "      " "9  do merge with ancestor in a"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    91
#tm "um a c" "um x c" "      " "10 do merge with no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    92
tm "nm a b" "nm a c" "      " "11 get c, keep b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    93
tm "nc a b" "up b  " "      " "12 merge b no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    94
tm "up b  " "nm a b" "      " "13 merge b no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    95
tm "nc a b" "up a b" "      " "14 merge b no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    96
tm "up b  " "nm a b" "      " "15 merge b no ancestor, remove a"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    97
tm "nc a b" "up a b" "      " "16 get a, merge b no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    98
tm "up a b" "nc a b" "      " "17 keep a, merge b no ancestor" 
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    99
tm "nm a b" "up a b" "      " "18 merge b no ancestor"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   100
tm "up a b" "nm a b" "      " "19 merge b no ancestor, prompt remove a"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   101
tm "up a  " "um a b" "      " "20 merge a and b to b, remove a"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   102
tm "um a b" "up a  " "      " "21 merge a and b to b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   103
#tm "nm a b" "um x a" "      " "22 get a, keep b"
ae85272b59a4 merge: copy fixes and tests
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   104
tm "nm a b" "up a c" "      " "23 get c, keep b"