Mercurial > hg
view tests/test-keyword @ 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 | f5aa20e177c0 |
children |
line wrap: on
line source
#!/bin/sh cat <<EOF >> $HGRCPATH [extensions] keyword = mq = notify = record = transplant = [ui] interactive = true EOF # demo before [keyword] files are set up # would succeed without uisetup otherwise echo % hg kwdemo hg --quiet kwdemo \ | sed -e 's![^ ][^ ]*demo.txt,v!/TMP/demo.txt,v!' \ -e 's/,v [a-z0-9][a-z0-9]* /,v xxxxxxxxxxxx /' \ -e '/[$]Revision/ s/: [a-z0-9][a-z0-9]* /: xxxxxxxxxxxx /' \ -e 's! 20[0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-6][0-9]:[0-6][0-9]! 2000/00/00 00:00:00!' hg --quiet kwdemo "Branch = {branches}" cat <<EOF >> $HGRCPATH [keyword] ** = b = ignore [hooks] commit= commit.test=cp a hooktest EOF hg init Test-bndl cd Test-bndl echo % kwshrink should exit silently in empty/invalid repo hg kwshrink # Symlinks cannot be created on Windows. The bundle was made with: # # hg init t # cd t # echo a > a # ln -s a sym # hg add sym # hg ci -m addsym -u mercurial # hg bundle --base null ../test-keyword.hg # hg pull -u "$TESTDIR/test-keyword.hg" \ | sed 's/pulling from.*test-keyword.hg/pulling from test-keyword.hg/' echo 'expand $Id$' > a echo 'do not process $Id:' >> a echo 'xxx $' >> a echo 'ignore $Id$' > b echo % cat cat a b echo % no kwfiles hg kwfiles echo % untracked candidates hg -v kwfiles --unknown echo % addremove hg addremove echo % status hg status echo % default keyword expansion including commit hook echo % interrupted commit should not change state or run commit hook hg --debug commit echo % status hg status echo % commit hg --debug commit -mabsym -u 'User Name <user@example.com>' echo % status hg status echo % identify hg debugrebuildstate hg --quiet identify echo % cat cat a b echo % hg cat hg cat sym a b echo echo % diff a hooktest diff a hooktest echo % removing commit hook from config sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nohook mv "$HGRCPATH".nohook "$HGRCPATH" rm hooktest echo % bundle hg bundle --base null ../kw.hg cd .. hg init Test cd Test echo % notify on pull to check whether keywords stay as is in email echo % ie. if patch.diff wrapper acts as it should cat <<EOF >> $HGRCPATH [hooks] incoming.notify = python:hgext.notify.hook [notify] sources = pull diffstat = False [reposubs] * = Test EOF echo % pull from bundle hg pull -u ../kw.hg 2>&1 | sed -e '/^Content-Type:/,/^diffs (/ d' echo % remove notify config sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nonotify mv "$HGRCPATH".nonotify "$HGRCPATH" echo % touch touch a b echo % status hg status rm sym a b echo % update hg update -C echo % cat cat a b echo % check whether expansion is filewise echo '$Id$' > c echo 'tests for different changenodes' >> c echo % commit c hg commit -A -mcndiff -d '1 0' -u 'User Name <user@example.com>' echo % force expansion hg -v kwexpand echo % compare changenodes in a c cat a c echo % record chunk python -c \ 'l=open("a").readlines();l.insert(1,"foo\n");l.append("bar\n");open("a","w").writelines(l);' hg record -d '1 10' -m rectest<<EOF y y n EOF echo hg identify hg status echo % cat modified file cat a hg diff | grep -v 'b/a' hg rollback echo % record file echo foo > msg # do not use "hg record -m" here! hg record -l msg -d '1 11'<<EOF y y y EOF echo % a should be clean hg status -A a rm msg hg rollback hg update -C echo % init --mq hg init --mq echo % qimport hg qimport -r tip -n mqtest.diff echo % commit --mq hg commit --mq -m mqtest echo % keywords should not be expanded in patch cat .hg/patches/mqtest.diff echo % qpop hg qpop echo % qgoto - should imply qpush hg qgoto mqtest.diff echo % cat cat c echo % hg cat hg cat c echo % keyword should not be expanded in filelog hg --config 'extensions.keyword=!' cat c echo % qpop and move on hg qpop echo % copy hg cp a c echo % kwfiles added hg kwfiles echo % commit hg --debug commit -ma2c -d '1 0' -u 'User Name <user@example.com>' echo % cat a c cat a c echo % touch copied c touch c echo % status hg status echo % kwfiles hg kwfiles echo % ignored files hg -v kwfiles --ignore echo % all files hg kwfiles --all echo % diff --rev hg diff --rev 1 | grep -v 'b/c' echo % rollback hg rollback echo % status hg status echo % update -C hg update --clean echo % custom keyword expansion echo % try with kwdemo hg --quiet kwdemo "Xinfo = {author}: {desc}" cat <<EOF >>$HGRCPATH [keywordmaps] Id = {file} {node|short} {date|rfc822date} {author|user} Xinfo = {author}: {desc} EOF echo % cat cat a b echo % hg cat hg cat sym a b echo echo '$Xinfo$' >> a cat <<EOF >> log firstline secondline EOF echo % interrupted commit should not change state hg commit echo % status hg status echo % commit hg --debug commit -l log -d '2 0' -u 'User Name <user@example.com>' rm log echo % status hg status echo % verify hg verify echo % cat cat a b echo % hg cat hg cat sym a b echo echo % annotate hg annotate a echo % remove hg debugrebuildstate hg remove a hg --debug commit -m rma echo % status hg status echo % rollback hg rollback echo % status hg status echo % revert a hg revert --no-backup --rev tip a echo % cat a cat a echo % clone cd .. echo % expansion in dest hg --quiet clone Test globalconf cat globalconf/a echo % no expansion in dest hg --quiet --config 'keyword.**=ignore' clone Test localconf cat localconf/a echo % clone to test incoming hg clone -r1 Test Test-a cd Test-a cat <<EOF >> .hg/hgrc [paths] default = ../Test EOF echo % incoming # remove path to temp dir hg incoming | sed -e 's/^\(comparing with \).*\(test-keyword.*\)/\1\2/' sed -e 's/Id.*/& rejecttest/' a > a.new mv a.new a echo % commit rejecttest hg --debug commit -m'rejects?' -d '3 0' -u 'User Name <user@example.com>' echo % export hg export -o ../rejecttest.diff tip cd ../Test echo % import hg import ../rejecttest.diff echo % cat cat a b echo echo % rollback hg rollback echo % clean update hg update --clean echo % kwexpand/kwshrink on selected files mkdir x echo % copy a x/a hg copy a x/a echo % kwexpand a hg --verbose kwexpand a echo % kwexpand x/a should abort hg --verbose kwexpand x/a cd x hg --debug commit -m xa -d '3 0' -u 'User Name <user@example.com>' echo % cat a cat a echo % kwshrink a inside directory x hg --verbose kwshrink a echo % cat a cat a cd .. echo % kwexpand nonexistent hg kwexpand nonexistent 2>&1 | sed 's/nonexistent:.*/nonexistent:/' echo % hg serve hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log cat hg.pid >> $DAEMON_PIDS echo % expansion echo % hgweb file ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/a/?style=raw') echo % no expansion echo % hgweb annotate ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/a/?style=raw') echo % hgweb changeset ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/tip/?style=raw') echo % hgweb filediff ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/bb948857c743/a?style=raw') echo % errors encountered cat errors.log echo % merge/resolve echo '$Id$' > m hg add m hg commit -m 4kw echo foo >> m hg commit -m 5foo echo % simplemerge hg update 4 echo foo >> m hg commit -m 6foo hg merge hg commit -m simplemerge cat m echo % conflict hg update 4 echo bar >> m hg commit -m 8bar hg merge echo % keyword stays outside conflict zone cat m echo % resolve to local HGMERGE=internal:local hg resolve -a hg commit -m localresolve cat m echo % test restricted mode with transplant -b hg update 6 hg branch foo mv a a.bak echo foobranch > a cat a.bak >> a rm a.bak hg commit -m 9foobranch hg update default hg -y transplant -b foo tip echo % no expansion in changeset hg tip -p echo % expansion in file head -n 2 a hg -q rollback hg -q update -C echo % switch off expansion echo % kwshrink with unknown file u cp a u hg --verbose kwshrink echo % cat cat a b echo % hg cat hg cat sym a b echo rm "$HGRCPATH" echo % cat cat a b echo % hg cat hg cat sym a b echo