COM-интерфейс

Если вам необходимо получить доступ к информации Subversion о ревизиях из других программ, вы можете использовать COM-интерфейс SubWCRev. Объект, который необходимо создать - SubWCRev.object, и им поддерживаются следующие методы:

Таблица 6.4. Поддерживаемые методы COM/автоматизации

МетодОписание
.GetWCInfoЭтот метод обходит рабочую копию, собирая информацию о ревизиях. Естественно, вы должны вызвать его до того, как в сможете обратиться к информации при помощи остальных методов. Первый параметр - путь. Второй параметр должен быть true, если вы желаете включить ревизии папок. Эквивалентен ключу командной строки -f. Третий параметр должен быть true, если вы желаете включить svn:externals. Эквивалентен ключу командной строки -e.
.GetWCInfo2GetWCInfo() с четырьмя параметрами эквивалентен параметру командной строки -E.
.RevisionНаибольшая ревизия фиксации в рабочей копии. Соответствует $WCREV$.
.DateДата и время наибольшей ревизии фиксации. Соответствует $WCDATE$.
.AuthorАвтор наибольшей зафиксированной ревизии, т.е. последний человек, зафиксировавший изменения в рабочей копии.
.MinRevМинимальная обновлённая ревизия, которая показывается в $WCRANGE$.
.MaxRevМаксимальная обновлённая ревизия, которая показывается в $WCRANGE$.
.HasModificationsTrue, если есть локальные изменения
.HasUnversionedИстина, если есть неверсированные элементы
.UrlЗаменяется на адрес URL хранилища рабочей копии использованной в GetWCInfo. Эквивалентно $WCURL$.
.IsSvnItemTrue, если элемент версирован.
.NeedsLockingTrue, если у элемента установлено свойство svn:needs-lock.
.IsLockedTrue, если элемент заблокирован.
.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("не версирован");
}