tests/test-rebase-collapse
author Edouard Gomez <ed.gomez@free.fr>
Sun, 04 Jan 2009 02:36:48 +0100
changeset 7583 77fec2d270ae
parent 7278 45495d784ad6
child 8168 8766fee6f225
permissions -rwxr-xr-x
convert/gnuarch: parse continuation-of revisions in gnuarch source In GNU Arch, continuation-of was often used for: - tagging revisions - continue working on a project in a new archive, because arch was scaling poorly in revision numbers (cat-logs were slow to be parsed and scanned through) - very similar to the previous point, fork his own branch of a project. Parsing this header information will allow to 'follow' new history because it often hints at older/forked/personal revision trees. This patch however just implements the parsing of the continuation-of header. A followup patch will implement the proper use of this new information.

#!/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" -u test -m $1
}

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

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

    hg update -C 0
    addcommit "E" 4

    hg update -C 0
    addcommit "F" 5

    hg merge -r 4
    commit "G" 6

    hg update -C 5
    addcommit "H" 7
}

createrepo > /dev/null 2>&1
hg glog  --template '{rev}: {desc}\n'
echo '% Rebasing B onto H'
hg up -C 3
hg rebase --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'
echo "Expected A, B, C, D, F, H"
hg manifest

createrepo > /dev/null 2>&1
echo
echo '% Rebasing G onto H'
hg rebase --base 6 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'
echo "Expected A, E, F, H"
hg manifest

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

    hg up 0
    addcommit "C" 2
    hg merge
    commit "D" 3

    hg up 1
    addcommit "E" 4

    addcommit "F" 5

    hg merge
    commit "G" 6

    hg up 0
    addcommit "H" 7
}

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

echo
echo '% Rebase and collapse - more than one external (fail)'
hg rebase -s 2 --collapse

echo
echo '% Rebase and collapse - E onto H'
hg rebase -s 4 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog  --template '{rev}: {desc}\n'
echo "Expected A, B, C, E, F, H"
hg manifest

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

    hg up 0
    addcommit "C" 2
    hg merge
    commit "D" 3

    hg up 1
    addcommit "E" 4
    
    echo "F" > E
    commit "F" 5

    addcommit "G" 6

    hg merge
    commit "H" 7

    hg up 0
    addcommit "I" 8
}

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

echo
echo '% Rebase and collapse - E onto I'
hg rebase -s 4 --collapse 

echo '% Fix conflict and continue'
echo 'Resolved merge' > E
hg resolve -m E
hg rebase -c 2>&1 | sed 's/\(saving bundle to \).*/\1/'

hg glog  --template '{rev}: {desc}\n'

echo "Expected A, B, C, E, G, I"
hg manifest

echo 'Cat E:'
cat E

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

    addcommit "C" 2
    hg up 1

    addcommit "D" 3
    
    hg merge
    commit "E" 4

    hg up 0
    addcommit "F" 5
}

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

echo
echo '% Rebase and collapse - B onto F'
hg rebase -s 1 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'

hg glog  --template '{rev}: {desc}\n'

echo "Expected A, B, C, D, F"
hg manifest
exit 0