Если вам необходимо получить доступ к информации Subversion о ревизиях из других программ, вы можете использовать COM-интерфейс SubWCRev. Объект, который необходимо создать - SubWCRev.object, и им поддерживаются следующие методы:
Таблица 6.4. Поддерживаемые методы COM/автоматизации
| Метод | Описание |
|---|---|
| .GetWCInfo | Этот метод обходит рабочую копию, собирая информацию о ревизиях. Естественно, вы должны вызвать его до того, как в сможете обратиться к информации при помощи остальных методов. Первый параметр - путь. Второй параметр должен быть true, если вы желаете включить ревизии папок. Эквивалентен ключу командной строки -f. Третий параметр должен быть true, если вы желаете включить svn:externals. Эквивалентен ключу командной строки -e. |
| .GetWCInfo2 | GetWCInfo() с четырьмя параметрами эквивалентен параметру командной строки -E. |
| .Revision | Наибольшая ревизия фиксации в рабочей копии. Соответствует $WCREV$. |
| .Date | Дата и время наибольшей ревизии фиксации. Соответствует $WCDATE$. |
| .Author | Автор наибольшей зафиксированной ревизии, т.е. последний человек, зафиксировавший изменения в рабочей копии. |
| .MinRev | Минимальная обновлённая ревизия, которая показывается в $WCRANGE$. |
| .MaxRev | Максимальная обновлённая ревизия, которая показывается в $WCRANGE$. |
| .HasModifications | True, если есть локальные изменения |
| .HasUnversioned | Истина, если есть неверсированные элементы |
| .Url | Заменяется на адрес URL хранилища рабочей копии использованной в GetWCInfo. Эквивалентно $WCURL$. |
| .IsSvnItem | True, если элемент версирован. |
| .NeedsLocking | True, если у элемента установлено свойство svn:needs-lock. |
| .IsLocked | True, если элемент заблокирован. |
| .LockCreationDate | Строка, содержащая дату, когда блокировка была создана, или пустая строка, если элемент не заблокирован. |
| .LockOwner | Строка, содержащая владельца блокировки, или пустая строка, если элемент не заблокирован. |
| .LockComment | Сообщение, введённое при создании блокировки. |
Следующий пример показывает, как может быть использован этот интерфейс.
// testCOM.js - файл javascript
// Проверочный сценарий для объекта COM/Automation SubWCRev
filesystem = new ActiveXObject("Scripting.FileSystemObject");
revObject1 = new ActiveXObject("SubWCRev.object");
revObject2 = new ActiveXObject("SubWCRev.object");
revObject3 = new ActiveXObject("SubWCRev.object");
revObject4 = new ActiveXObject("SubWCRev.object");
revObject1.GetWCInfo(
filesystem.GetAbsolutePathName("."), 1, 1);
revObject2.GetWCInfo(
filesystem.GetAbsolutePathName(".."), 1, 1);
revObject3.GetWCInfo(
filesystem.GetAbsolutePathName("SubWCRev.cpp"), 1, 1);
revObject4.GetWCInfo2(
filesystem.GetAbsolutePathName("..\\.."), 1, 1, 1);
wcInfoString1 = "Revision = " + revObject1.Revision +
"\nMin Revision = " + revObject1.MinRev +
"\nMax Revision = " + revObject1.MaxRev +
"\nDate = " + revObject1.Date +
"\nURL = " + revObject1.Url + "\nAuthor = " +
revObject1.Author + "\nHasMods = " +
revObject1.HasModifications + "\nIsSvnItem = " +
revObject1.IsSvnItem + "\nNeedsLocking = " +
revObject1.NeedsLocking + "\nIsLocked = " +
revObject1.IsLocked + "\nLockCreationDate = " +
revObject1.LockCreationDate + "\nLockOwner = " +
revObject1.LockOwner + "\nLockComment = " +
revObject1.LockComment;
wcInfoString2 = "Revision = " + revObject2.Revision +
"\nMin Revision = " + revObject2.MinRev +
"\nMax Revision = " + revObject2.MaxRev +
"\nDate = " + revObject2.Date +
"\nURL = " + revObject2.Url + "\nAuthor = " +
revObject2.Author + "\nHasMods = " +
revObject2.HasModifications + "\nIsSvnItem = " +
revObject2.IsSvnItem + "\nNeedsLocking = " +
revObject2.NeedsLocking + "\nIsLocked = " +
revObject2.IsLocked + "\nLockCreationDate = " +
revObject2.LockCreationDate + "\nLockOwner = " +
revObject2.LockOwner + "\nLockComment = " +
revObject2.LockComment;
wcInfoString3 = "Revision = " + revObject3.Revision +
"\nMin Revision = " + revObject3.MinRev +
"\nMax Revision = " + revObject3.MaxRev +
"\nDate = " + revObject3.Date +
"\nURL = " + revObject3.Url + "\nAuthor = " +
revObject3.Author + "\nHasMods = " +
revObject3.HasModifications + "\nIsSvnItem = " +
revObject3.IsSvnItem + "\nNeedsLocking = " +
revObject3.NeedsLocking + "\nIsLocked = " +
revObject3.IsLocked + "\nLockCreationDate = " +
revObject3.LockCreationDate + "\nLockOwner = " +
revObject3.LockOwner + "\nLockComment = " +
revObject3.LockComment;
wcInfoString4 = "Revision = " + revObject4.Revision +
"\nMin Revision = " + revObject4.MinRev +
"\nMax Revision = " + revObject4.MaxRev +
"\nDate = " + revObject4.Date +
"\nURL = " + revObject4.Url + "\nAuthor = " +
revObject4.Author + "\nHasMods = " +
revObject4.HasModifications + "\nIsSvnItem = " +
revObject4.IsSvnItem + "\nNeedsLocking = " +
revObject4.NeedsLocking + "\nIsLocked = " +
revObject4.IsLocked + "\nLockCreationDate = " +
revObject4.LockCreationDate + "\nLockOwner = " +
revObject4.LockOwner + "\nLockComment = " +
revObject4.LockComment;
WScript.Echo(wcInfoString1);
WScript.Echo(wcInfoString2);
WScript.Echo(wcInfoString3);
WScript.Echo(wcInfoString4);
Следующий пример показывает, как может быть использован COM-объект SubWCRev из C#:
using LibSubWCRev;
SubWCRev sub = new SubWCRev();
sub.GetWCInfo("C:\\Путь\\к\\файлу\\МойФайл.cc", true, true);
if (sub.IsSvnItem == true)
{
MessageBox.Show("версирован");
}
else
{
MessageBox.Show("не версирован");
}