Подтвердить что ты не робот

Как я могу запросить мой репозиторий subversion?

В настоящее время я просто хотел бы найти все файлы, которые не были изменены за последние X дней, но в конечном итоге я хотел бы сделать более сложные запросы против моего репозитория subversion.

Существует ли какой-либо язык запросов Subversion Query или API, который я мог бы использовать?

4b9b3361

Ответ 1

Вы можете использовать svn log для создания XML файла с большим количеством информации обо всех таких коммитах:

svn log URL --xml --verbose > commits.xml

Есть несколько вариантов, с которыми вы можете играть, чтобы ограничить диапазон ревизий, получить дополнительную информацию о реквизитах rev, включить информацию о слиянии и т.д.

Затем возникает проблема "как выполнять запросы в содержимом XML-документа", что проще, чем работать с существующими API SVN. Например, в С# вы можете сделать запросы LINQ в XML.

Ответ 2

Вы можете использовать проект SvnQuery (http://svnquery.tigris.org), который намерен предоставить интерфейс запроса для выполнения таких запросов. Он имеет .NET API и веб-интерфейс, предоставляя одинаковый язык запросов. Вы можете выполнять сложные запросы с операторами, вложенными выражениями, подстановочными знаками, фразами и фразами. Оператор, которого вы запрашиваете, вычисляет разницу между текущей и последней датой фиксации, не реализован, но поскольку это проект с открытым исходным кодом, вы можете либо добровольно сделать это, либо опубликовать запрос функции для него: -)

Ответ 3

В настоящее время нет, нет языка запросов subversion или основанного на запросах api, который широко используется (хорошо, теперь наблюдайте, как кто-то противоречит мне, что жизнь в сети, я полагаю).

Это означает, что вы ограничены объединением выходов из обычных команд svn, таких как

svn info

и

svn log

Я уверен, что что-то вроде bash или powershell могло сделать это по крайней мере выполнимым. Если вы застряли с пакетом окон, я сейчас начну плакать.

Ответ 6

С Powershell вы можете сделать несколько приятных запросов на сообщения журнала

$data = [xml] (svn log -r "r1:r2" --xml)
$data.log.logentry | where-object {$_.message -match "regex"}

Или даже в файлах, которые были изменены (с некоторой магией, чтобы избежать известной проблемы с PowerShell)

$diff = [xml] (svn diff -r "r1:r2" --xml --summarize | %{$_ -replace "item", "item1"})
$diff.diff.paths.path | where-object {$_.item1 -eq "file"}

Ответ 7

Как уже упоминалось, svn log/info можно комбинировать с командами оболочки, чтобы найти то, что вы хотите. Кроме того, вы можете напрямую использовать собственный API SVN в C/С++ для программирования процесса создания репозитория. SVN имеет привязки Python. Если Java является вашим языком выбора, попробуйте http://svnkit.com/

Ответ 9

Помимо использования командной строки Subversion или графического клиента, такого как TortoiseSVN для просмотра истории репозитория svn, вы можете установить расширенный веб-интерфейс для репозиториев Subversion.

Например, в VisualSVN Server 3.2 и новее вы можете использовать средство просмотра истории веб-просмотра, см. демонстрацию здесь.

Ниже приведено описание веб-клиента svn на базе HTML5.

Ответ 10

Начиная с 1.7 SVN, рабочая копия имеет файл wc.db в каталоге .svn. Это базовая база данных sqlite, поэтому довольно легко выполнить запрос.

Вы должны убедиться, что ваша рабочая копия обновлена. Если вы делаете что-то большее, чем быстрый и простой выбор, было бы безопаснее скопировать файл, а не рискнуть его сломать.

Дата изменения основана на эпохе unix. Например:

sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES"