2011-06-30 20 views
7

Katalog mojego projektu .hg to 40 MB. Jeśli I hg push --verbose --debug do pustego zdalnego repozytorium widzę, wysyłając setki MB. Skąd się bierze dodatkowy koszt?Dlaczego "hg push" jest o wiele większy niż .hg?

UPDATE: hg bundle -a generuje plik 35 MB. Tutaj jest okrojoną wersją wyjściu widzę:

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

"Widzę, że wysyła setki MB." - Jak to zmierzyłeś? –

+0

@Joel, wyjście (zamieszczone powyżej) mówi "wysyłanie xxx bajtów", gdzie xxx wynosi około 300 MB. – Gili

Odpowiedz

7

Jest to znany błąd Pythona. Ze względu na sposób działania biblioteki http Pythona, najpierw wysyła dane, serwer odpowiada, że ​​potrzebuje uwierzytelnienia, a następnie ponownie wysyła dane.

Przy użyciu najnowszej porcji rtęci (począwszy od wersji 1.9) można użyć alternatywnej biblioteki http. Po prostu dodaj w hgrc:

[ui] 
usehttp2 = true 
+0

Bardzo interesujące! Czy możesz połączyć się z raportami o błędach i dyskusjami, które rzucają więcej światła na to? – Gili

+0

Nie mogę dowiedzieć się, jak włączyć tę opcję. Nie jest jasne, gdzie ma wejść w hgrc ani jaka wersja Mercuriala obsługuje. – Gili

+0

Ta została wydana w wersji 1.9, myliłem się, faktyczna konfiguracja to: ui.usehttp2, wyjaśnię mój post. – tonfa

1

Możliwe, że repozytorium jesteś naciska na nie obsługuje skompresowany transfer. Z jakiego protokołu korzystasz? Jeśli jest to http, zalecam, abyś oglądał pierwsze żądania do zdalnego repozytorium (jeden z nich dotyczy określania możliwości, które oferuje zdalne repo).

Jeśli używasz adresu URL pliku do wypychania, prawdopodobnie niewiele możesz z tym zrobić.

+0

Przechodzę do Google Code, używając https. Ta linia zwróciła moją uwagę: "możliwości: branchmap lookup unbundle = HG10UN, HG10UGZ, HG10BZ changegroupsubset", ale nie jestem pewien co to znaczy. – Gili

+0

Zgodnie z http://mercurial.selenic.com/wiki/HttpCommandProtocol oznacza to, że obsługiwana jest kompresja. Co się dzieje, gdy naciskasz, to przesuwasz pakiet, który zostanie scalony w zdalne repozytorium. Czy możesz spróbować stworzyć pakiet pełnego repozytorium i zobaczyć, jak duże to jest? –

+0

'Pakiet hg -a' generuje plik 35 MB. Zobacz zaktualizowane pytanie, dołączyłem wyciąg z negocjacji protokołu. – Gili