2011-06-30 23 views
7

El directorio de .hg de mi proyecto es de 40MB. Si yo hg push --verbose --debug a un repositorio remoto vacío, lo veo enviando cientos de MB. ¿De dónde viene la sobrecarga extra?¿Por qué "hg push" es mucho más grande que .hg?

ACTUALIZACIÓN: hg bundle -a genera un archivo de 35MB. Aquí es una versión reducida de la salida que estoy viendo:

pushing to https://jace.googlecode.com/hg/ 
using https://jace.googlecode.com/hg/ 
sending between command 
using auth.default.* for authentication 
jace.googlecode.com certificate successfully verified 
sending capabilities command 
using auth.default.* for authentication 
capabilities: branchmap lookup unbundle=HG10UN,HG10UGZ,HG10BZ changegroupsubset 
sending heads command 
using auth.default.* for authentication 
searching for changes 
common changesets up to 71818a195bf5 
sending branchmap command 
[...] 
bundling: <filenames> 
sending unbundle command 
sending xxx bytes 
[...] 
sending: xxx/xxx kb 
+0

"Lo veo enviando cientos de MB." - ¿Cómo lo midiste? –

+0

@Joel, la salida (publicada arriba) dice "enviando xxx bytes" donde xxx es 300MB o menos. – Gili

Respuesta

7

Este es un error conocido de Python. Debido a la forma en que funciona la biblioteca http de python, primero envía los datos, el servidor responde que necesita una autenticación y reenvía los datos.

Con un mercurial reciente (comenzando en 1.9) puede usar una biblioteca http alternativa. Simplemente agregue lo siguiente en hgrc:

[ui] 
usehttp2 = true 
+0

¡Muy interesante! ¿Pueden vincular los informes de errores y las discusiones que arrojan más luz sobre esto? – Gili

+0

No puedo entender cómo habilitar esta opción. No está claro dónde se supone que debe ir en hgrc ni qué versión de Mercurial lo admite. – Gili

+0

Esto fue lanzado en 1.9, estaba equivocado, la configuración actual es: ui.usehttp2, aclararé mi publicación. – tonfa

1

Podría ser que el repositorio que está empujando a no admite la transferencia comprimido. ¿Qué protocolo estás usando? Si es http, le recomiendo que vea las primeras solicitudes al repositorio remoto (una de ellas es para determinar las capacidades que ofrece el repositorio remoto).

Si está utilizando una URL de archivo para presionar, probablemente no hay mucho que pueda hacer al respecto.

+0

Estoy presionando a Google Code usando https. Esta línea me llamó la atención: "capacidades: searchmap unbundle de branchmap = HG10UN, HG10UGZ, HG10BZ changegroupsubset", pero no estoy seguro de lo que significa. – Gili

+0

De acuerdo con http://mercurial.selenic.com/wiki/HttpCommandProtocol, esto significa que la compresión es compatible. Lo que sucede cuando presionas es que estás empujando un paquete que se fusiona con el repositorio remoto. ¿Puedes intentar hacer un paquete de tu repositorio completo y ver qué tan grande es eso? –

+0

'hg bundle -a' genera un archivo de 35MB. Vea la pregunta actualizada, he incluido un extracto de la negociación del protocolo. – Gili