|
Source Code Control Interface
Введение
|
      
Для унификации способа доступа к хранилищам исходных кодов ваших проектов, управляемыми различными средствами контроля версий, корпорацией
Microsoft был разработан и в настоящее время остается стандартом de-facto интерфейс SCCI. Данный интерфейс реализуют все самые популярные для
платформы Microsoft Windows средства контроля версий: WinCVS, PVCS, Visual Source Safe и Rational ClearCase. Однако, для реализации программного
способа подключения к хранилищам этих сред необходим по крайней мере заголовочный файл, получить который можно только в случае подписания
с Microsoft договора о неразглашении.
     
Зачастую сторонним разработчикам достаточно лишь примитивных функций получения списка файлов, их блокирования (checkout) и "возвращения" (checkin)
обратно в хранилище. Jim Kingdon (электронного адреса, к сожалению, у меня нет) исследовал библиотеку CVS, реализующую данный интерфейс и
описал ту его часть, которую чаще всего приходится использовать. Мною был разработан класс-обертка интерфейса SCCI с некоторыми дополнительными
расширениями, позволяющими получить список установленных сред (vendor) и подключиться к любому из них, что реализуется путем динамической загрузки
библиотек.
|
Описание функций
|
EnumVendors | Возвращает список установленных на машине средств контроля версий, а также индекс в этом списке текущего используемого средства. |
SelectVendor | Выбор средства контроля версий, загрузка динамической библиотеки, реализующей интерфейс SCCI. |
GetErrorText | Возвращает текст последней ошибки. |
SccInitialize | Инициализация библиотеки. |
SccUninitialize | Деинициализация библиотеки. |
SccGetProjPath | Возвращет путь к проекту в терминах конкретной среды. Желательно использовать перед открытием проекта, даже если вы уверены в передаваемом пути. |
SccOpenProject | Открывает заданный проект, перед деинициализацией необходимо закрывать проекты. |
SccCloseProject | Закрывает проект, необходимо вызывать каждый раз после открытия проекта. |
SccPopulateList | Возвращает список файлов в данном проекте. |
SccCheckout | Checkout одного или нескольких файлов. |
SccUncheckout | Отмена предыдущей операции. |
SccCheckin | Сохранение одного или нескольких файлов в хранилище версий. |
SccGetLatest | Загрузка на локальную машину последних версий заданных файлов. |
SccGetCommandOptions | Возвращает число-параметр, специфичные для конкретной среды, по заданной команде. |
HasAdvancedOptions | Определяет, есть ли расширенные опции для конкретной команды. |
|
Пример использования
|
===================getsccfilelist.cpp========================
...
#include <list>
#include <map>
#include "cstring.h"
#include "sccvendor.h"
...
CSCCVendor m_scc;
...
// определяем имя текущего пользователя для подключения к
// VSS, чтобы не происходило интерфейсное перелогонивание
//
TCHAR lptName[_MAX_PATH] = {0};
DWORD dwNameSize = _MAX_PATH - 1;
if(::GetUserName(lptName, &dwNameSize)) {
return false;
}
username = lptName;
// загружаем библиотеку, реализующую SCC-интерфейс
//
m_scc.SelectVendor("Microsoft Visual Source Safe");
// инициализация окружения SCC
//
TCHAR comment[255] = {0};
if(!m_scc.SccInitialize(NULL, comment)) {
error(m_scc.GetErrorText());
return false;
}
TCHAR lpProject[255] = {0};
TCHAR lpResource[255] = {0};
TCHAR lpAuxProject[255] = {0};
sprintf(lpProject, "\"$/PROJECT_NAME\"");
// определим путь (в терминах SCC vendor) к проекту
//
if(!m_scc.SccGetProjPath(NULL, (char *) username,
lpProject, (char *) local,
lpAuxProject, FALSE, &bNew))
{
error(m_scc.GetErrorText());
return false;
}
TCHAR lpComment[255] = {0};
// открываем проект
//
if(!m_scc.SccOpenProject(NULL, (char *) username,
lpProject, (char *) local,
lpAuxProject, lpComment, 0))
{
error(m_scc.GetErrorText());
return false;
}
// получаем список файлов проекта
//
std::vector libs;
if(!m_scc.SccPopulateList(SCC_command_get,
0, NULL, libs, NULL, 0)) {
error(m_scc.GetErrorText());
return false;
}
// по окончании всех действий закрываем проект
//
m_scc.SccCloseProject();
...
=======================================================
|
|
|