Функция SccGet
Эта функция извлекает копию одного или нескольких файлов для просмотра и компиляции, но не для редактирования. В большинстве систем файлы помечены как доступные только для чтения.
Синтаксис
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
Параметры
pvContext
[in] Структура контекста подключаемого модуля управления версиями.
hWnd
[in] Дескриптор окна интегрированной среды разработки, который подключаемый модуль управления версиями может использовать в качестве родительского элемента для любых диалоговых окон, которые он предоставляет.
nFiles
[in] Количество файлов, указанных в массиве lpFileNames
.
lpFileNames
[in] Массив полных имен файлов для извлечения.
fOptions
[in] Флаги команд (SCC_GET_ALL
, SCC_GET_RECURSIVE
).
pvOptions
[in] Параметры подключаемого модуля управления версиями.
Возвращаемое значение
Реализация подключаемого модуля управления версиями этой функции должна возвращать одно из следующих значений:
значение | Описание |
---|---|
SCC_OK | Успешное выполнение операции получения. |
SCC_E_FILENOTCONTROLLED | Файл не находится под управлением версиями. |
SCC_E_OPNOTSUPPORTED | Система управления версиями не поддерживает эту операцию. |
SCC_E_FILEISCHECKEDOUT | Не удается получить файл, который пользователь в настоящее время проверка выпустить. |
SCC_E_ACCESSFAILURE | Возникла проблема с доступом к системе управления версиями, вероятно, из-за проблем с сетью или спором. Рекомендуется повторить попытку. |
SCC_E_NOSPECIFIEDVERSION | Указана недопустимая версия или дата/время. |
SCC_E_NONSPECIFICERROR | Неспецифический сбой; файл не был синхронизирован. |
SCC_I_OPERATIONCANCELED | Операция отменена до завершения. |
SCC_E_NOTAUTHORIZED | Пользователь не авторизован для выполнения этой операции. |
Замечания
Эта функция вызывается с числом и массивом имен файлов, которые необходимо извлечь. Если интегрированная среда разработки передает флаг SCC_GET_ALL
, это означает, что элементы в lpFileNames
файлах не являются файлами, а каталогами, и что все файлы под управлением версиями в указанных каталогах должны быть извлечены.
Флаг SCC_GET_ALL
можно объединить с флагом SCC_GET_RECURSIVE
, чтобы получить все файлы в указанных каталогах и всех подкаталогах.
Примечание.
SCC_GET_RECURSIVE
никогда не следует передавать без SCC_GET_ALL
. Кроме того, обратите внимание, что если каталоги C:\A и C:\A\B передаются при рекурсивном получении, C:\A\B и все его вложенные каталоги будут фактически извлечены дважды. Это ответственность интегрированной среды разработки (а не подключаемый модуль управления версиями), чтобы убедиться, что повторяющиеся элементы, такие как это, хранятся вне массива.
Наконец, даже если подключаемый модуль управления версиями указал SCC_CAP_GET_NOUI
флаг при инициализации, указывая, что у него нет пользовательского интерфейса для команды Get, эта функция может вызываться интегрированной интегрированной системой разработки для получения файлов. Флаг просто означает, что интегрированная среда разработки не отображает элемент меню Get и что подключаемый модуль не должен предоставлять пользовательский интерфейс.
Переименование файлов и SccGet
Ситуация: пользователь проверка файл, например a.txt, и изменяет его. Перед проверка.txt второй пользователь переименовывает a.txt в b.txt в базе данных системы управления версиями, проверка из b.txt, вносит некоторые изменения в файл и проверка в нем. Первый пользователь хочет изменения, внесенные вторым пользователем, поэтому первый пользователь переименовывает локальную версию файла a.txt в b.txt и получает в файле. Однако локальный кэш, который отслеживает номера версий, по-прежнему думает, что первая версия a.txt хранится локально, поэтому управление версиями не может устранить различия.
Существует два способа устранить эту ситуацию, когда локальный кэш версий управления версиями системы управления версиями выходит из синхронизации с базой данных управления версиями:
Не разрешайте переименовать файл в базе данных управления версиями, которая в настоящее время проверка отключена.
Выполните эквивалент "удалить старый", за которым следует "добавить новое". Следующий алгоритм является одним из способов этого.
Вызовите функцию SccQueryChanges, чтобы узнать о переименовании a.txt в b.txt в базе данных управления версиями.
Переименуйте локальный a.txt в b.txt.
Вызовите функцию
SccGet
для a.txt и b.txt.Так как файл a.txt не существует в базе данных системы управления версиями, локальный кэш версий очищается от отсутствующих сведений о версии a.txt .
Файл b.txt, проверка отключен, объединяется с содержимым локального файла b.txt.
Обновленный файл b.txt теперь можно проверка.