Problemas al aplicar un parche svn a un repository mercurial

El file de parche está hecho con TortoiseSVN-> Create Patch …

Intentando importar el parche en el repository de mercurial usando hg import patchfile .

Parece que hay problemas con la forma en que hg busca los files a los que se hace reference en el file de parche:

 unable to find 'gui/gui/RemoteFramework.cpp' for patching 2 out of 2 hunks FAILED -- saving rejects to file gui/gui/RemoteFramwork.cpp.rej 

Esto parece ser una cuestión de dónde se hizo el parche en términos de directorys y dónde se debe aplicar. He intentado jugar con la opción –base para la import de hg, pero aún no he llegado a ninguna parte.

Alguien tiene algun consejo?

Sospecho que debes hg import --strip 0 patchfile ya que Subversion no incluye ningún prefijo en la ruta del file. --base especifica dónde debe search los files y --strip dice cuántos (por defecto 1) elementos de ruta ignorar al comienzo de los encabezados de diff.

He tenido el mismo problema al mover mi proyecto, CartoType, de Subversion a Mercurial. Hice que se revisaran las cosas de Subversion en C: \ CartoType, y un clon del repository de Mercurial en C: \ CartoType-mercurial.

Usé TortoiseSVN para crear files unificados de diferencias y descubrí que estaba usando routes como C: /CartoType/src/main/router/cartotype_router.h en ellas. Al ejecutar el parche hg en C: \ CartoType-mercurial, encontré que lo correcto era quitar dos elementos de la ruta, por lo tanto:

 hg patch -p2 c:\temp\patch1982.diff 

La otra cosa importante que tenía que hacer era replace las líneas 'Index' en el file diff con los comentarios de check-in, porque de ahí es de donde hg patch los saca. Entonces en este ejemplo tuve que cambiar la primera línea de mi file diff de

 Index: C:/CartoType/src/main/router/cartotype_router.h 

a

 Added an optional parameter to NewRoadOrWalkingRouter... (etc.) 

Si hay varias líneas de índice en el file diff, cámbielas todas al mismo comentario de check-in.