Как я могу запросить мой репозиторий Subversion? - PullRequest
19 голосов
/ 20 февраля 2009

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

Есть ли какой-нибудь язык запросов Subversion или API, который я мог бы использовать?

Ответы [ 10 ]

16 голосов
/ 03 апреля 2009

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

14 голосов
/ 20 февраля 2009

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

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

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

Тогда возникает проблема «как выполнить запросы к содержимому XML-документа», что проще, чем работа с существующими API-интерфейсами SVN. Например, в C # вы можете выполнять LINQ запросов по XML .

2 голосов
/ 16 марта 2011

С 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"}
2 голосов
/ 13 июля 2010

Вы можете оформить заказ VoilàSVN или OpenGrok

2 голосов
/ 20 февраля 2009

нет языка запросов к хранилищу или API поиска. для сложных запросов вам понадобится индексатор репозитория (например, http://supose.soebes.de/wiki/supose) или база данных коммитов (например, http://www.viewvc.org/). http://markmail.org/thread/wszzgnrny6o2r7u7 имеет еще несколько ссылок.

2 голосов
/ 20 февраля 2009

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

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

svn info

и

svn log

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

1 голос
/ 23 сентября 2015

Начиная с версии 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"
1 голос
/ 11 февраля 2015

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

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

См. Описание веб-svn-клиента на основе HTML5 здесь .

1 голос
/ 03 сентября 2010

Проверьте Рыбий глаз. Действительно круто.

http://211.144.86.166/software/fisheye/docs/EyeQL%20Reference%20Guide.html

1 голос
/ 20 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...