Mercurial diff no funciona después de mover / cambiar el nombre

Después de mover un file a otro directory, ya no puedo mostrar las diferencias entre dos revisiones. P.ej:

hg init touch a hg add a hg ci -m "Added a" echo "Bli" >> a hg ci -m "Bli" echo "Bla" >> a hg ci -m "Bla" echo "Blub" >> a hg ci -m "Blub" hg diff -r 0 -r 1 a 

Resultados en:

 diff -r 8603b08f5a64 -r 16675581549e a --- a/a Mon Apr 23 09:03:25 2012 +0000 +++ b/a Mon Apr 23 09:03:25 2012 +0000 @@ -0,0 +1,1 @@ +Bli 

que es lo que esperaba Sin embargo, cuando muevo el file "a" a un directory "b":

 mkdir b hg mv ab/a hg ci -m "Moved a into b" cd b hg diff -r 0 -r 1 a 

esto resulta en nada (sin salida en absoluto). También traté de usar el git Giff algo:

 hg diff --git -r 0 -r 1 a 

De nuevo, no hay salida en absoluto. El logging parece estar bien:

 hg log --follow a 

Resultados en:

 changeset: 4:cb8185829bfd tag: tip user: XXXXXXXXXXXXXXXXXXXXXXXXXXXX date: Mon Apr 23 09:08:12 2012 +0000 summary: Moved a into b changeset: 3:4d1ba89885c3 user: XXXXXXXXXXXXXXXXXXXXXXXXXXXX date: Mon Apr 23 09:03:26 2012 +0000 summary: Blub changeset: 2:e9126dbb50b2 user: XXXXXXXXXXXXXXXXXXXXXXXXXXXX date: Mon Apr 23 09:03:26 2012 +0000 summary: Bla changeset: 1:16675581549e user: XXXXXXXXXXXXXXXXXXXXXXXXXXXX date: Mon Apr 23 09:03:25 2012 +0000 summary: Bli changeset: 0:8603b08f5a64 user: XXXXXXXXXXXXXXXXXXXXXXXXXXXX date: Mon Apr 23 09:03:25 2012 +0000 summary: Added a 

¿Alguien tiene alguna idea de por qué la diferencia no funciona después de mover un file? Tu ayuda es muy apreciada.

Esto es difícil o imposible con Mercurial de hoy. Creo que lo más cercano que puedes conseguir es

 hg log --follow --patch -r 1 a 

donde Mercurial rastreará las copys hacia atrás ( --follow ) antes de mostrar el diff ( --patch ).

En general, Mercurial no rastrea las identidades de los files , solo rastrea los nombres de los files . Cuando busque información por número de revisión, Mercurial searchá primero la revisión y luego searchá cualquier nombre de file en esa revisión. Entonces hg cat -r 0 a le dará el mismo resultado que

 hg update -r 0 cat a 

es decir, el resultado es independiente del padre del directory de trabajo actual.

Creo que es porque b/a no existe en la revisión 1 o la revisión 0. Si ejecuta el command hg diff -r 0 -r 4 desde dentro de la carpeta b , debe producir el resultado esperado.

Si ejecuta hg diff -r 0 -r 1 a desde la raíz de la copy de trabajo, también debe mostrar el resultado esperado.