view tests/test-subrepo @ 12252:4481f8a93c7a stable

convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354) Given a commit author or message with non-ASCII characters in a darcs repo, convert would raise a UnicodeEncodeError when adding changesets to the hg changelog. This happened because etree returns back unicode objects for any text it can't encode into ASCII. convert was passing these objects to changelog.add(), which would then attempt encoding.fromlocal() on them. This patch ensures converter_source.recode() is called on each piece of commit data returned by etree. (Also note that darcs is currently encoding agnostic and will print out whatever is in a patch's metadata byte-for-byte, even in the XML changelog.)
author Brodie Rao <brodie@bitheap.org>
date Fri, 10 Sep 2010 09:30:50 -0500
parents b602a95c21ec
children
line wrap: on
line source

#!/bin/sh

rm -rf sub
mkdir sub
cd sub
hg init t
cd t

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

echo % add first sub
echo s = s > .hgsub
hg add .hgsub
hg init s
echo a > s/a

# issue2232 - committing a subrepo without .hgsub
hg ci -mbad s

hg -R s ci -Ams0
hg sum
hg ci -m1

# issue 2022 - update -C
echo b > s/a
hg sum
hg co -C 1
hg sum

echo % add sub sub
echo ss = ss > s/.hgsub
hg init s/ss
echo a > s/ss/a
hg -R s add s/.hgsub
hg -R s/ss add s/ss/a
hg sum
hg ci -m2
hg sum

echo % bump sub rev
echo b > s/a
hg -R s ci -ms1
hg ci -m3

echo % leave sub dirty
echo c > s/a
hg ci -m4
hg tip -R s

echo % check caching
hg co 0
hg debugsub
echo % restore
hg co
hg debugsub

echo % new branch for merge tests
hg co 1
echo t = t >> .hgsub
hg init t
echo t > t/t
hg -R t add t
echo % 5
hg ci -m5 # add sub
echo t2 > t/t
echo % 6
hg st -R s
hg ci -m6 # change sub
hg debugsub
echo t3 > t/t
echo % 7
hg ci -m7 # change sub again for conflict test
hg rm .hgsub
echo % 8
hg ci -m8 # remove sub

echo % merge tests
hg co -C 3
hg merge 5 # test adding
hg debugsub
hg ci -m9
hg merge 6 --debug # test change
hg debugsub
echo conflict > t/t
hg ci -m10
HGMERGE=internal:merge hg merge --debug 7 # test conflict
echo % should conflict
cat t/t

echo % clone
cd ..
hg clone t tc | sed 's|from .*/sub|from .../sub|g'
cd tc
hg debugsub

echo % push
echo bah > t/t
hg ci -m11
hg push | sed 's/ .*sub/ ...sub/g'

echo % push -f
echo bah > s/a
hg ci -m12
hg push | sed 's/ .*sub/ ...sub/g'
hg push -f | sed 's/ .*sub/ ...sub/g'

echo % update
cd ../t
hg up -C # discard our earlier merge
echo blah > t/t
hg ci -m13

echo % pull
cd ../tc
hg pull | sed 's/ .*sub/ ...sub/g'
# should pull t
hg up | sed 's|from .*/sub|from .../sub|g'
cat t/t

echo % bogus subrepo path aborts
echo 'bogus=[boguspath' >> .hgsub
hg ci -m 'bogus subrepo path'

echo % issue 1986
cd ..
rm -rf sub
hg init main
cd main

hg init s           # subrepo layout
cd s                #
echo a > a          #   o   5 br
hg ci -Am1          #  /|
hg branch br        # o |   4 default
echo a >> a         # | |
hg ci -m1           # | o   3 br
hg up default       # |/|
echo b > b          # o |   2 default
hg ci -Am1          # | |
hg up br            # | o   1 br
hg merge tip        # |/
hg ci -m1           # o     0 default
hg up 2
echo c > c
hg ci -Am1
hg up 3
hg merge 4
hg ci -m1

cd ..                         # main repo layout:
echo 's = s' > .hgsub         #
hg -R s up 2                  #   * <-- try to merge default into br again
hg ci -Am1                    # .`|
hg branch br                  # . o   5 br      --> substate = 5
echo b > b                    # . |
hg -R s up 3                  # o |   4 default --> substate = 4
hg ci -Am1                    # | |
hg up default                 # | o   3 br      --> substate = 2
echo c > c                    # |/|
hg ci -Am1                    # o |   2 default --> substate = 2
hg up 1                       # | |     
hg merge 2                    # | o   1 br      --> substate = 3
hg ci -m1                     # |/    
hg up 2                       # o     0 default --> substate = 2
hg -R s up 4
echo d > d
hg ci -Am1
hg up 3
hg -R s up 5
echo e > e
hg ci -Am1

hg up 5
hg merge 4    # try to merge default into br again
cd ..

echo % test subrepo delete from .hgsubstate
hg init testdelete
mkdir testdelete/nested testdelete/nested2
hg init testdelete/nested
hg init testdelete/nested2
echo test > testdelete/nested/foo
echo test > testdelete/nested2/foo
hg -R testdelete/nested add
hg -R testdelete/nested2 add
hg -R testdelete/nested ci -m test
hg -R testdelete/nested2 ci -m test
echo nested = nested > testdelete/.hgsub
echo nested2 = nested2 >> testdelete/.hgsub
hg -R testdelete add
hg -R testdelete ci -m "nested 1 & 2 added"
echo nested = nested > testdelete/.hgsub
hg -R testdelete ci -m "nested 2 deleted"
cat testdelete/.hgsubstate | sed "s:.* ::"
hg -R testdelete remove testdelete/.hgsub
hg -R testdelete ci -m ".hgsub deleted"
cat testdelete/.hgsubstate

echo % test repository cloning
mkdir mercurial mercurial2
hg init nested_absolute
echo test > nested_absolute/foo
hg -R nested_absolute add
hg -R nested_absolute ci -mtest
cd mercurial
hg init nested_relative
echo test2 > nested_relative/foo2
hg -R nested_relative add
hg -R nested_relative ci -mtest2
hg init main
echo "nested_relative = ../nested_relative" > main/.hgsub
echo "nested_absolute = `pwd`/nested_absolute" >> main/.hgsub
hg -R main add
hg -R main ci -m "add subrepos"
cd ..
hg clone mercurial/main mercurial2/main
cat mercurial2/main/nested_absolute/.hg/hgrc \
    mercurial2/main/nested_relative/.hg/hgrc \
    | "$TESTDIR/filtertmp.py"
rm -rf mercurial mercurial2

echo % issue 1977
hg init repo
hg init repo/s
echo a > repo/s/a
hg -R repo/s ci -Am0
echo s = s > repo/.hgsub
hg -R repo ci -Am1
hg clone repo repo2 | sed 's|from .*/sub|from .../sub|g'
hg -q -R repo2 pull -u
echo 1 > repo2/s/a
hg -R repo2/s ci -m2
hg -q -R repo2/s push
hg -R repo2/s up -C 0
echo 2 > repo2/s/a
hg -R repo2/s ci -m3
hg -R repo2 ci -m3
hg -q -R repo2 push
hg -R repo update
rm -rf repo2 repo

exit 0