view tests/test-newbranch @ 8742:a964ab624385

merge: allow merging going backwards New behavior is generally superior and more correct, except possibly with regards to missing files. hg up . is now effectively a no-op, which is probably the desired behavior for people expecting to move to tip, but may surprise people who were expecting deleted files to reappear. case 1: update to . a-w -> a-w classic: ancestor a missing recreated right? rmed recreated WRONG added forgotten WRONG changed preserved RIGHT conflicted can't happen backward merge: ancestor a (NO EFFECT) missing missing wrong? rm'ed rm'ed RIGHT added preserved RIGHT changed preserved RIGHT conflicted can't happen case 2: update to ancestor of . a-b-w -> b-w \ a classic: ancestor a missing recreated right? rmed recreated wrong? added forgotten wrong? changed preserved RIGHT conflicted preserved wrong? backwards merge: ancestor b missing missing or conflict right? rm'ed missing or conflict right? changed preserved RIGHT conflicted merge RIGHT added preserved right?
author Matt Mackall <mpm@selenic.com>
date Mon, 08 Jun 2009 18:14:44 -0500
parents 816b708f23af
children e67e5b60e55f
line wrap: on
line source

#!/bin/sh

branchcache=.hg/branchheads.cache

hg init t
cd t
hg branches

echo foo > a
hg add a
hg ci -m "initial" -d "1000000 0"
hg branch foo
hg branch
hg ci -m "add branch name" -d "1000000 0"
hg branch bar
hg ci -m "change branch name" -d "1000000 0"
echo % branch shadowing
hg branch default
hg branch -f default
hg ci -m "clear branch name" -d "1000000 0"

hg co foo
hg branch
echo bleah > a
hg ci -m "modify a branch" -d "1000000 0"

hg merge default
hg branch
hg ci -m "merge" -d "1000000 0"
hg log

hg branches
hg branches -q

echo % test for invalid branch cache
hg rollback
cp $branchcache .hg/bc-invalid
hg log -r foo
cp .hg/bc-invalid $branchcache
hg --debug log -r foo
rm $branchcache
echo corrupted > $branchcache
hg log -qr foo
cat $branchcache

echo % push should update the branch cache
hg init ../target
echo % pushing just rev 0
hg push -qr 0 ../target
cat ../target/$branchcache
echo % pushing everything
hg push -qf ../target
cat ../target/$branchcache

echo % update with no arguments: tipmost revision of the current branch
hg up -q -C 0
hg up -q
hg id
hg up -q 1
hg up -q
hg id
hg branch foobar
hg up

echo % fastforward merge
hg branch ff
echo ff > ff
hg ci -Am'fast forward' -d '1000000 0'
hg up foo
hg merge ff
hg branch
hg commit -m'Merge ff into foo' -d '1000000 0'
hg parents
hg manifest

echo % test merging, add 3 default heads and one test head
cd ..
hg init merges
cd merges
echo a > a
hg ci -Ama

echo b > b
hg ci -Amb

hg up 0
echo c > c
hg ci -Amc

hg up 0
echo d > d
hg ci -Amd

hg up 0
hg branch test
echo e >> e
hg ci -Ame

hg log

echo % implicit merge with test branch as parent
hg merge
hg up -C default
echo % implicit merge with default branch as parent
hg merge
echo % 3 branch heads, explicit merge required
hg merge 2
hg ci -m merge
echo % 2 branch heads, implicit merge works
hg merge