Снятие блокировки зомби в Subversion

Я пытаюсь найти способ снять блокировки зомби с помощью инструментов командной строки Subversion. Конечная цель состоит в том, чтобы сделать это из скрипта ловушки, но я не смог разработать командную строку для использования, когда у вас есть только физический путь к репозиторию. (Использование rmlocks svnadmin, по-видимому, работает только для блокировок, которые существуют в версии HEAD.)

В идеале я хотел бы сделать это с помощью скрипта перехвата после фиксации, используя инструменты командной строки. (Я знаю о скрипте Python для этой цели, но мы бы предпочли не устанавливать Python на этот сервер только для этого единственного использования.) Мы являемся магазином .NET, поэтому создание инструмента с библиотекой SharpSVN также является возможно, но единственная возможность разблокировки, по-видимому, находится в классе SVNClient.

Так что на самом деле есть два вопроса: есть ли способ сделать это с помощью инструментов командной строки? Если нет, есть ли способ сделать это из SharpSVN? (Или, может быть, другая библиотека?)

== Обновление от 3 декабря 2012 г. ==

Недавно мне пришлось вернуться к этой проблеме, и я обнаружил, что этот вопрос все еще привлекает трафик. Сценарий Python, упомянутый в исходном вопросе, и ответ Дона с тех пор перемещены по адресу: http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/remove-zombie-locks..py (я предполагаю, что это то, что большинство людей ищут.)

По иронии судьбы, несмотря на то, что репозиторий переместился на Linux, мы используем решение C.


person ThatBlairGuy    schedule 26.02.2010    source источник


Ответы (4)


Существует скрипт Python (упоминается здесь: http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId=2369399). Я бы либо использовал это, либо перевел на .NET, если вам нужно.

person Don    schedule 26.02.2010
comment
Это сценарий, о котором я упоминал в своем вопросе. Мне не удалось найти эквивалент командной строки для метода svn_repos_fs_unlock. (кажется, что svnadmin rmlocks работает только для блокировки в версии HEAD.) Аналогично, с SharpSVN единственный доступный метод разблокировки — на стороне клиента. - person ThatBlairGuy; 01.03.2010
comment
Извиняюсь; не знаю, как я пропустил тот факт, что вы упомянули скрипт Python. В основном я ответил вам на ваш собственный вопрос ... SharpSVN - это оболочка .NET для клиентского API, поэтому тот же вызов должен быть доступен, если разработчики его реализовали. Искал в исходниках метод svn_repos_fs_unlock и не нашел. Вы можете задать вопрос на форуме SharpSVN, sharpsvn.open.collab. net/ds/viewForumSummary.do?dsForumId=728, просто чтобы убедиться. Если вы знакомы с C, вы можете напрямую вызвать API. - person Don; 01.03.2010
comment
Спасибо. Если до этого дойдет, вызов API возможен, но я бы сразу избегал этого, если подходящее колесо уже существует. - person ThatBlairGuy; 01.03.2010
comment
Потому что он говорит, что мы магазин .NET. Тем не менее, спасибо за полезный комментарий. - person Don; 19.03.2010
comment
К сожалению, указанная статья в настоящее время не предлагает скрипт Python. Он перенаправляется прямо на subversion.apache.org/source-code без каких-либо объяснений. - person Znik; 29.05.2017
comment
Сценарий перемещен в svn. .apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ ;-) - person ThatBlairGuy; 26.10.2018

Похоже, ответ таков: «Отсюда туда не добраться».

  • Svnadmin предоставляет командную строку для снятия блокировок с путем к репозиторию, но, похоже, она не работает с блокировками-зомби.
  • SharpSVN в основном работает на стороне клиента; у него есть несколько методов подключения к пути репозитория, но они (согласно документации) в основном используются в модульных тестах библиотеки.

Итак, переписав скрипт Python на C, используя библиотеку Subversion API.

person ThatBlairGuy    schedule 05.04.2010
comment
но, похоже, это не работает с замками-зомби. Нет, это работает, если вы знаете путь к устаревшему замку. - person bahrep; 27.10.2014
comment
@bahrep - я проверил это, прежде чем писать этот ответ. Насколько я помню (это было было 4 1/2 года назад), svnadmin отлично работал для файла, существовавшего в текущей версии, но если файл был помечен как удаленный, он терпел неудачу. Возможно, с тех пор что-то изменилось. Этот вопрос по-прежнему генерирует довольно много трафика, поэтому, если вы можете предоставить скрипт-ловушку, который использует svnadmin для выполнения задачи, он, вероятно, будет полезен другим, и я с радостью изменю свой принятый ответ. - person ThatBlairGuy; 18.11.2014

Если вы знаете путь репозитория к удаленному файлу, который заблокирован зомби, это настолько просто, что я сначала не мог в это поверить:

svn unlock --force https://path/to/my/file

Это работает, даже если удаленный файл (по определению) не существует в голове репозитория. Пересмотр привязки не требуется и не допускается. Параметр force необходим только в том случае, если блокировка принадлежит другому пользователю.

person Wolfgang Winzer    schedule 19.07.2018
comment
Мне это помогло :) - person Koen; 19.03.2019

Общая проблема с блокировкой зомби заключается в том, что svn предотвращает удаление каталога до тех пор, пока блокировка не будет снята со всех файлов и подпапок под ним. Предположим, вы хотите удалить папку с именем code из вашего репозитория svn svn://192.168.0.1/trunk/codes. Вы можете использовать инструмент командной строки svn следующим образом, чтобы выполнить удаление папки. svn rm -m не требуется svn://192.168.0.1/trunk/codes Теперь svn отвечает с ошибкой типа svn: предупреждение: W160040: Нет блокировки на пути '/trunk/codes/abc.txt Затем вы можете разблокировать этот несуществующий abc.txt с помощью следующей команды svn unlock --force svn://192.168.0.1/trunk/codes/abc.txt (см. использование пути svn вместо локального пути) Если больше нет заблокированного несуществующего файла, следующая команда удалить папку т.е. svn rm -m не требуется svn://192.168.0.1/trunk/codes успешно.

person Ali    schedule 17.08.2020