view tests/test-rebase-scenario-global @ 10135:9a4034b630c4 stable

patch: better handling of sequence of offset patch hunks (issue1941) The built-in patch implementation applied the hunks to the wrong lines of the file if the file in the repo has been modified to skew the patch line numbers and the file contains repetitive sequences of lines.
author Greg Onufer <gonufer@jazzhaiku.com>
date Wed, 09 Dec 2009 16:56:00 -0800
parents 341182ac95e4
children b345b1cc124f
line wrap: on
line source

#!/bin/sh

echo "[extensions]" >> $HGRCPATH
echo "graphlog=" >> $HGRCPATH
echo "rebase=" >> $HGRCPATH

BASE=`pwd`

addcommit () {
    echo $1 > $1
    hg add $1
    hg commit -d "${2} 0" -m $1
}

commit () {
    hg commit -d "${2} 0" -m $1
}

createrepo () {
    cd $BASE
    rm -rf a
    hg init a
    cd a
    addcommit "A" 0
    addcommit "B" 1

    hg update -C 0
    addcommit "C" 2

    hg update -C 0
    addcommit "D" 3

    hg merge -r 2
    commit "E" 4

    hg update -C 3
    addcommit "F" 5
}

createrepo > /dev/null 2>&1
hg glog  --template '{rev}: {desc}\n'

echo '% Rebasing'
echo '% B onto F - simple rebase'
hg rebase -s 1 -d 5 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

createrepo > /dev/null 2>&1
echo '% B onto D - intermediate point'
hg rebase -s 1 -d 3 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

createrepo > /dev/null 2>&1
echo '% C onto F - skip of E'
hg rebase -s 2 -d 5 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

createrepo > /dev/null 2>&1
echo '% D onto C - rebase of a branching point (skip E)'
hg rebase -s 3 -d 2 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

createrepo > /dev/null 2>&1
echo '% E onto F - merged revision having a parent in ancestors of target'
hg rebase -s 4 -d 5 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

createrepo > /dev/null 2>&1
echo '% D onto B - E maintains C as parent'
hg rebase -s 3 -d 1 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'

echo '% These will fail (using --source)'
createrepo > /dev/null 2>&1
echo '% E onto D - rebase onto an ancestor'
hg rebase -s 4 -d 3
echo '% D onto E - rebase onto a descendant'
hg rebase -s 3 -d 4
echo '% E onto B - merge revision with both parents not in ancestors of target'
hg rebase -s 4 -d 1

echo
echo '% These will abort gracefully (using --base)'
echo '% E onto E - rebase onto same changeset'
hg rebase -b 4 -d 4
echo '% E onto D - rebase onto an ancestor'
hg rebase -b 4 -d 3
echo '% D onto E - rebase onto a descendant'
hg rebase -b 3 -d 4

exit 0