LINUX.ORG.RU

не работает hg push с largefiles

 


0

2

С какого-то момент перестал работать push:

$ hg push -v --debug
pushing to ssh://repos@stuff/crm
running ssh repos@stuff "hg -R crm serve --stdio"
sending hello command
sending between command
remote: 162
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle
=HG10GZ,HG10BZ,HG10UN httpheader=1024 largefiles=serve
remote: 1
query 1; heads
sending batch command
searching for changes
all remote heads known locally
sending statlfile command
uploading largefiles: 0/1 largefile (0.00%)
Found 4a1ac6038d2a7a88e7a3459c674ac5c987ecfead in store
sending statlfile command
remotestore: sendfile(/home/true_admin/repos/crm/.hg/largefiles/4a1ac6038d2a7a88e7a3459c674ac5c987ecfead, 4a1ac6038d2a7a88
e7a3459c674ac5c987ecfead)
sending putlfile command
sending: 4/516 kb (0.78%)
...
sending: 258/516 kb (50.00%)
abort: remotestore: could not put /home/true_admin/repos/crm/.hg/largefiles/4a1ac6038d2a7a88e7a3459c674ac5c987ecfead to remote store ssh://repos@stuff/crm

На стороне сервера можно как-то логи посмотреть? Хотя и без них, судя по strace, понятно что рвёт соединение клиент. С других клиентов push на этот же сервер проходит нормально.

Если запустить с --traceback то ничего нового не увидим:

  File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 4338, in push
    newbranch=opts.get('new_branch'))
  File "/usr/lib/python2.7/dist-packages/hgext/largefiles/reposetup.py", line 410, in push
    lfcommands.uploadlfiles(ui, self, remote, toupload)
  File "/usr/lib/python2.7/dist-packages/hgext/largefiles/lfcommands.py", line 341, in uploadlfiles
    store.put(source, hash)
  File "/usr/lib/python2.7/dist-packages/hgext/largefiles/remotestore.py", line 28, in put
    % (source, self.url))
Abort: remotestore: could not put /home/true_admin/repos/crm/.hg/largefiles/4a1ac6038d2a7a88e7a3459c674ac5c987ecfead to remote store ssh://repos@stuff/crm
abort: remotestore: could not put /home/true_admin/repos/crm/.hg/largefiles/4a1ac6038d2a7a88e7a3459c674ac5c987ecfead to remote store ssh://repos@stuff/crm

Ну вот кто так людей учил программы писать? Из этого сообщения понятно что ничего не понятно. Хоть бы вменяемо падало... Там даже в сырцах есть «# XXX check for errors here»...

Через strace на клиенте пока не выявил каких-либо проблем. Более того, у меня создаётся ощущение что файл отправляется до конца, а не на 50% (потому что последний чанк меньше других). Пробовал через vpn заливать, те же яйца.

Есть идеи?

Попробуйте на последней версии mercurial из репозитория. Они там постоянно что-то правят в largefiles.

Sorcerer ★★★★★ ()
Ответ на: комментарий от Sorcerer

Поставил последнюю версию и оно таки выдало ошибку, аллилуя!

largefile contents do not match hash. Чё делать? :(

Я подозревал что-то в этом духе и поэтому специально запушил с другой тачки новую ревизию. Однако при push оно, похоже, пытается залить все известные версии.

true_admin ★★★★★ ()
Ответ на: комментарий от Sorcerer

В общем, поправил сырцы меркуриала чтобы он игнорил ошибку. Всё залилось.

Возможно можно было поправить «a standin file in '.hglf/'».

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Последняя версия на сервере и на клиенте, или только на клиенте? Вообще - багрепортить надо. Можно ещё попробовать сделать hg push в локальный клон репозитория: будет ли ошибка в этом случае?

Про другую тачку и залив всех известных версий я не понял.

Sorcerer ★★★★★ ()
Ответ на: комментарий от true_admin

Если там реально ошибка в несоответствии контрольных сумм после передачи файла (т.е. файл на сервере после заливки отличается от того, что заливал клиент), то такая правка сами понимаете к чему приведёт. Нужно зайти на сервер и проверить, совпадают ли файлы. Ну или pull этой ревизии с сервера в другом репозитории сделать, и проверить. Ну и багрепортнуть желательно всё-таки.

Sorcerer ★★★★★ ()
Ответ на: комментарий от Sorcerer

обновил везде, но проверка делалась на сервере.

Я не нашёл ни одного упоминания этой проблемы в гугле, так что, думаю, что-то у меня пошло не так. Например, файл обновился во время коммита (что, правда, странно). Напишу в мэйл-лист...

Можно ещё попробовать сделать hg push в локальный клон репозитория: будет ли ошибка в этом случае?

теперь уже поздно, но уверен что будет: судя по коду, при любом store проверяется sha1 сумма вне зависимости от транспорта (локальный репозиторий, ssh, http, ...).

true_admin ★★★★★ ()
Ответ на: комментарий от Sorcerer

Да, кажись я понял. Файл мог поменяться во время написания сообщения для коммита. Т.е. я набрал hg commit, он мне высветил редактор и в этот момент я понял что не закрыл софтину. Я прибиваю софтину, она сохраняет настройки, но hg сохраняет состояние large files только после успешного коммита, а вот sha1 считает вначале. Это моя версия. Напишу разрабам.

true_admin ★★★★★ ()
Ответ на: комментарий от Sorcerer

Да, проверил, так и есть. Ээх, часа три, наверное, протрахался с этой проблемой. Уже думал на железо грешить (и такое у в жизни было, процы неправильно md5 считали (каждый раз по-разному)).

d520@testrepo$ cd ./testrepo/
d520@testrepo$ hg init .
d520@testrepo$ hg ^C
d520@testrepo$ echo "vini vidi vici" > ./testfile
d520@testrepo$ hg add --large ./testfile 
d520@testrepo$ hg ci
d520@testrepo$ sha1sum ./testfile 
946182004f43f6603de5ec071be37c525922cd66  ./testfile
d520@testrepo$ 
d520@testrepo$ cat ./.hglf/testfile 
192324f261896e049b55935499309227ceb3dcfc
true_admin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.