Функция 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 хранится локально, поэтому управление версиями не может устранить различия.

Существует два способа устранить эту ситуацию, когда локальный кэш версий управления версиями системы управления версиями выходит из синхронизации с базой данных управления версиями:

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

  2. Выполните эквивалент "удалить старый", за которым следует "добавить новое". Следующий алгоритм является одним из способов этого.

    1. Вызовите функцию SccQueryChanges, чтобы узнать о переименовании a.txt в b.txt в базе данных управления версиями.

    2. Переименуйте локальный a.txt в b.txt.

    3. Вызовите функцию SccGet для a.txt и b.txt.

    4. Так как файл a.txt не существует в базе данных системы управления версиями, локальный кэш версий очищается от отсутствующих сведений о версии a.txt .

    5. Файл b.txt, проверка отключен, объединяется с содержимым локального файла b.txt.

    6. Обновленный файл b.txt теперь можно проверка.

См. также