Как решить эту ошибку при попытке экспорта SVN с помощью pysvn?

Я пытаюсь использовать привязки Python SVN (pysvn) для экспорта в репозиторий и сталкиваюсь со следующей ошибкой:

python: subversion/libsvn_subr/dirent_uri.c:955: svn_dirent_join: Assertion `svn_dirent_is_canonical(base, pool)' failed.
Aborted (core dumped)

Пример кода:

import pysvn
client = pysvn.Client()
uri = 'https://svn.mycompany.com/myproject/trunk/'
# This works fine
print client.list(uri)
# This crashes with the above error
r = client.export(uri, './temp', force=True)

Однако выполнение svn export --force https://svn.mycompany.com/myproject/trunk/ из приглашения оболочки работает без проблем.

Я использую:

  • Питон 2.7.3
  • Подрывная версия 1.7.5
  • CentOS 6.0 x64

Есть идеи, пожалуйста?


person jamieb    schedule 24.07.2012    source источник
comment
Что, если вы попробуете указать абсолютный путь вместо ./temp? строка subversion/libsvn_subr/dirent_uri.c:955 — это assert(svn_dirent_is_canonical(база, пул)); так что проблема в формате пути   -  person Dmitry Pavlenko    schedule 24.07.2012


Ответы (2)


API Subversion использует канонические URL-адреса и пути для внутреннего использования. Ваш URL имеет косую черту в конце, и это не канонический URL. Удалите завершающую косую черту или используйте функцию svn_uri_canonicalize() для канонизации URL-адреса перед вызовом функций Subversion API.

Вы можете найти более подробную информацию в документации Subversion API: http://subversion.apache.org /docs/api/latest/svn_дирент_uri_8h.html

person Ivan Zhakov    schedule 24.07.2012
comment
Спасибо за отличный совет! В моем случае я использовал опцию --config-dir с путем, заканчивающимся косой чертой, и эта косая черта вызвала ошибку утверждения. - person oliver; 08.08.2017

Я попытался использовать схему svn+ssh:// и получил ту же ошибку. Это навело меня на мысль, что сбой утверждения на самом деле может быть не связан с URI репо. По прихоти я изменил каталог экспорта на /tmp/, и все заработало нормально. Каталог, который я пытался использовать ранее (./temp), существует в моем домашнем каталоге, который находится на монтировании NFS с включенной опцией «root squash». Ранее было известно, что это вызывает странные проблемы с приложениями.

person jamieb    schedule 24.07.2012