view tests/test-convert-hg-svn.t @ 44450:7d5455b988ec stable

discovery: avoid wrong detection of multiple branch heads (issue6256) This fix the code using obsolescence markers to remove "to be obsoleted" heads during the detection of new head creation from push. The code turned out to not use the branch information at all. This lead changeset from different branch to be detected as new head on unrelated branch. The code fix is actually quite simple. New tests have been added to covers these cases. Differential Revision: https://phab.mercurial-scm.org/D8259
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 06 Mar 2020 23:27:28 +0100
parents e095a9688a31
children 7e5be4a7cda7
line wrap: on
line source

#require svn svn-bindings

  $ filter_svn_output () {
  >     egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
  > }

  $ cat <<EOF >> $HGRCPATH
  > [extensions]
  > convert =
  > mq =
  > EOF

  $ SVNREPOPATH=`pwd`/svn-repo
  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"

  $ svnadmin create "$SVNREPOPATH"
  $ cat > "$SVNREPOPATH"/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 "$SVNREPOPATH"/hooks/pre-revprop-change
  $ svn co "$SVNREPOURL" "$SVNREPOPATH"-wc
  Checked out revision 0.
  $ cd "$SVNREPOPATH"-wc
  $ echo a > a
  $ svn add a
  A         a
  $ svn ci -m'added a' a | filter_svn_output
  Adding         a
  Transmitting file data .
  Committed revision 1.
  $ cd ..

initial roundtrip

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

second roundtrip should do nothing

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

new hg rev

  $ hg clone "$SVNREPOPATH"-hg "$SVNREPOPATH"-work
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd "$SVNREPOPATH"-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 "$SVNREPOPATH"-hg pull -q "$SVNREPOPATH"-work
  $ hg convert -s hg -d svn "$SVNREPOPATH"-hg "$SVNREPOPATH"-wc
  scanning source...
  sorting...
  converting...
  1 b
  0 emtpy

svn back to hg should do nothing

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

hg back to svn should do nothing

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

verify which shamap format we are storing and must be able to handle

  $ cat svn-repo-hg/.hg/shamap
  svn:????????-????-????-????-????????????@1 ???????????????????????????????????????? (glob)
  svn:????????-????-????-????-????????????@2 ???????????????????????????????????????? (glob)
  svn:????????-????-????-????-????????????@2 ???????????????????????????????????????? (glob)
  $ cat svn-repo-wc/.svn/hg-shamap
  ???????????????????????????????????????? 1 (glob)
  ???????????????????????????????????????? svn:????????-????-????-????-????????????@2 (glob)
  ???????????????????????????????????????? svn:????????-????-????-????-????????????@2 (glob)