view tests/test-subrepo-svn @ 10397:8cb81d75730c

mq: add parent node IDs to MQ patches on qrefresh/qnew The goal of this patch is to add the IDs of the parents of applied MQ patches into the patch file headers whenever qnew or qrefresh are run. This will serve as a reminder of when the patches last applied cleanly and will let us do more intelligent things in the future, such as: * Resolve conflicts found when qpushing to a new location by merging instead of simply showing rejects. * Display better diffs of versioned MQ patches because we can tell how the patched files have changed in the meantime. Here are the new rules this patch introduces. They are checked in this order: * If a patch currently has old, plain-style patch headers ("From:" and "Date:") do not change the style or add any new headers. * If the 'mq.plain' configuration setting is true, only plain-style headers will be used for all MQ patches. * qnew will initialize new patches with HG-style headers and fill in the "# Parent" header with the appropriate parent node. * qrefresh will refresh the "# Parent" header with the current parent of the current patch.
author Steve Losh <steve@stevelosh.com>
date Sun, 07 Feb 2010 10:47:54 -0500
parents e898bc7810ad
children caaa1f99d681
line wrap: on
line source

#!/bin/sh

"$TESTDIR/hghave" svn || exit 80

fix_path()
{
    tr '\\' /
}

escapedwd=`pwd | fix_path`
# SVN wants all paths to start with a slash. Unfortunately,
# Windows ones don't. Handle that.
expr $escapedwd : "\/" > /dev/null
if [ $? -ne 0 ]; then
    escapedwd='/'$escapedwd
fi
filterpath="sed s|$escapedwd|/root|"

echo % create subversion repo

SVNREPO="file://$escapedwd/svn-repo"
WCROOT="`pwd`/svn-wc"
svnadmin create svn-repo
svn co $SVNREPO svn-wc
cd svn-wc
mkdir src
echo alpha > src/alpha
svn add src
mkdir externals
echo other > externals/other
svn add externals
svn ci -m 'Add alpha'
svn up
cat > extdef <<EOF
externals -r1 $SVNREPO/externals
EOF
svn propset -F extdef svn:externals src
svn ci -m 'Setting externals'
cd ..

echo % create hg repo
mkdir sub
cd sub
hg init t
cd t

echo % first revision, no sub
echo a > a
hg ci -Am0

echo % add first svn sub
echo "s = [svn]$SVNREPO/src" >> .hgsub
svn co --quiet $SVNREPO/src s
hg add .hgsub
hg ci -m1
echo % debugsub
hg debugsub | $filterpath

echo
echo % change file in svn and hg, commit
echo a >> a
echo alpha >> s/alpha
hg commit -m 'Message!'
hg debugsub | $filterpath

echo
echo a > s/a
echo % should be empty despite change to s/a
hg st

echo
echo % add a commit from svn
cd "$WCROOT"/src
svn up
echo xyz >> alpha
svn propset svn:mime-type 'text/xml' alpha
svn ci -m 'amend a from svn'
cd ../../sub/t

echo % this commit from hg will fail
echo zzz >> s/alpha
hg ci -m 'amend alpha from hg'
svn revert -q s/alpha

echo % this commit fails because of meta changes
svn propset svn:mime-type 'text/html' s/alpha
hg ci -m 'amend alpha from hg'
svn revert -q s/alpha

echo % this commit fails because of externals changes
echo zzz > s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other

echo % this commit fails because of externals meta changes
svn propset svn:mime-type 'text/html' s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other

echo
echo % clone
cd ..
hg clone t tc | fix_path
cd tc
echo % debugsub in clone
hg debugsub | $filterpath