tests/test-convert-hg-svn.t
author Matt Mackall <mpm@selenic.com>
Tue, 22 Nov 2011 17:26:32 -0600
branchstable
changeset 15551 1fa41d1f1351
parent 12527 9a0528fd9172
child 17033 0413f68da85c
permissions -rw-r--r--
posix: add extended support for OS X path folding OS X does the following transformation on paths for comparisons: a) 8-bit strings are decoded as UTF-8 to UTF-16 b) undecodable bytes are percent-escaped c) accented characters are converted to NFD decomposed form, approximately d) characters are converted to _lowercase_ using internal tables Both (c) and (d) are done using internal tables that vary from release to release and match Unicode specs to greater or lesser extent. We approximate these functions using Python's internal Unicode data. With this change, Mercurial will (in almost all cases) match OS X folding and not report unknown file aliases for files in UTF-8 or other encodings.


  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
  $ fix_path()
  > {
  >     tr '\\' /
  > }
  $ echo "[extensions]" >> $HGRCPATH
  $ echo "convert = " >> $HGRCPATH
  $ echo "mq = " >> $HGRCPATH
  $ svnpath=`pwd | fix_path`/svn-repo
  $ svnadmin create "$svnpath"
  $ cat > "$svnpath"/hooks/pre-revprop-change <<EOF
  > #!/bin/sh
  > 
  > REPOS="$1"
  > REV="$2"
  > USER="$3"
  > PROPNAME="$4"
  > ACTION="$5"
  > 
  > if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
  > if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-branch" ]; then exit 0; fi
  > if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-rev" ]; then exit 0; fi
  > 
  > echo "Changing prohibited revision property" >&2
  > exit 1
  > EOF
  $ chmod +x "$svnpath"/hooks/pre-revprop-change
  $ 
  $ # SVN wants all paths to start with a slash. Unfortunately,
  $ # Windows ones don't. Handle that.
  $ svnurl="$svnpath"
  $ expr "$svnurl" : "\/" > /dev/null || svnurl="/$svnurl"
  $ svnurl="file://$svnurl"
  $ svn co "$svnurl" "$svnpath"-wc
  Checked out revision 0.
  $ cd "$svnpath"-wc
  $ echo a > a
  $ svn add a
  A         a
  $ svn ci -m'added a' a
  Adding         a
  Transmitting file data .
  Committed revision 1.
  $ cd ..

initial roundtrip

  $ hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg | grep -v initializing
  scanning source...
  sorting...
  converting...
  0 added a
  $ hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
  scanning source...
  sorting...
  converting...

second roundtrip should do nothing

  $ hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg
  scanning source...
  sorting...
  converting...
  $ hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
  scanning source...
  sorting...
  converting...

new hg rev

  $ hg clone "$svnpath"-hg "$svnpath"-work
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd "$svnpath"-work
  $ echo b > b
  $ hg add b
  $ hg ci -mb

adding an empty revision

  $ hg qnew -m emtpy empty
  $ hg qfinish -a
  $ cd ..

echo hg to svn

  $ hg --cwd "$svnpath"-hg pull -q "$svnpath"-work
  $ hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
  scanning source...
  sorting...
  converting...
  1 b
  0 emtpy

svn back to hg should do nothing

  $ hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg
  scanning source...
  sorting...
  converting...

hg back to svn should do nothing

  $ hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
  scanning source...
  sorting...
  converting...