2011-06-30 11 views
7

La directory .hg del mio progetto è 40 MB. Se I hg push --verbose --debug in un repository remoto vuoto, lo vedo inviare centinaia di MB. Da dove proviene l'overhead extra?Perché "hg push" è molto più grande di .hg?

UPDATE: hg bundle -a genera un file da 35 MB. Ecco una versione ridotta della produzione che sto vedendo:

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

"Vedo che invia centinaia di MB." - Come l'hai misurato? –

+0

@Joel, l'output (pubblicato sopra) dice "invio xxx byte" dove xxx è 300MB circa. – Gili

risposta

7

Questo è un bug python noto. A causa del modo in cui la libreria http python funziona, invia prima i dati, il server risponde che ha bisogno di un'autenticazione e reinvia i dati.

Con un recente mercurial (a partire da 1.9) è possibile utilizzare una libreria http alternativa. Basta aggiungere quanto segue in hgrc:

[ui] 
usehttp2 = true 
+0

Molto interessante! Puoi per favore collegarti a segnalazioni di bug e discussioni che gettano più luce su questo? – Gili

+0

Non riesco a capire come abilitare questa opzione. Non è chiaro dove dovrebbe andare in hgrc né quale versione di Mercurial lo supporta. – Gili

+0

Questo è stato rilasciato nel 1.9, ho sbagliato la configurazione attuale è: ui.usehttp2, chiarirò il mio post. – tonfa

1

Potrebbe essere che il repository si sta spingendo a non supporta il trasferimento compressa. Che protocollo stai usando? Se è http, ti consiglio di guardare le prime richieste al repository remoto (una di queste riguarda la determinazione delle funzionalità offerte dal repository remoto).

Se si sta utilizzando un URL di file per spingere, probabilmente non c'è molto che si possa fare a riguardo.

+0

Sto spingendo a Google Code utilizzando https. Questa linea attirò la mia attenzione: "capacità: branchmap lookup unbundle = HG10UN, HG10UGZ, HG10BZ changegroupsubset" ma non sono sicuro di cosa significhi. – Gili

+0

In base a http://mercurial.selenic.com/wiki/HttpCommandProtocol, ciò significa che la compressione è supportata. Quello che succede quando spingi è che stai spingendo un bundle in realtà che viene unito al repository remoto. Puoi provare a creare un pacchetto del tuo repository completo e vedere quanto è grande? –

+0

'hg bundle -a' genera un file da 35MB. Vedi la domanda aggiornata, ho incluso un estratto della negoziazione del protocollo. – Gili