diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -239,7 +239,8 @@ def clone(ui, source, dest=None, pull=Fa if dest_repo.local(): fp = dest_repo.opener("hgrc", "w", text=True) fp.write("[paths]\n") - fp.write("default = %s\n" % abspath) + # percent needs to be escaped for ConfigParser + fp.write("default = %s\n" % abspath.replace('%', '%%')) fp.close() if update: diff --git a/tests/test-hgrc b/tests/test-hgrc --- a/tests/test-hgrc +++ b/tests/test-hgrc @@ -5,3 +5,14 @@ cd t hg init echo "invalid" > .hg/hgrc hg status 2>&1 |sed -e "s:/.*\(/t/.*\):...\1:" + +#issue 1199, escaping + +cd .. +hg init "foo%bar" +hg clone "foo%bar" foobar +p=`pwd` +cd foobar +cat .hg/hgrc |sed -e "s:$p:...:" +hg paths |sed -e "s:$p:...:" +hg showconfig |sed -e "s:$p:...:" diff --git a/tests/test-hgrc.out b/tests/test-hgrc.out --- a/tests/test-hgrc.out +++ b/tests/test-hgrc.out @@ -2,3 +2,15 @@ abort: Failed to parse .../t/.hg/hgrc File contains no section headers. file: .../t/.hg/hgrc, line: 1 'invalid\n' +updating working directory +0 files updated, 0 files merged, 0 files removed, 0 files unresolved +[paths] +default = .../foo%%bar +default = .../foo%bar +bundle.mainreporoot=.../foobar +defaults.backout=-d "0 0" +defaults.commit=-d "0 0" +defaults.debugrawcommit=-d "0 0" +defaults.tag=-d "0 0" +paths.default=.../foo%bar +ui.slash=True