Función SccGet

Esta función recupera una copia de uno o varios archivos para ver y compilar, pero no para editarlos. En la mayoría de los sistemas, los archivos se etiquetan como de solo lectura.

Sintaxis

SCCRTN SccGet(
   LPVOID    pvContext,
   HWND      hWnd,
   LONG      nFiles,
   LPCSTR*   lpFileNames,
   LONG      fOptions,
   LPCMDOPTS pvOptions
);

Parámetros

pvContext

[in] Estructura de contexto del complemento de control de código fuente.

hWnd

[in] Identificador de la ventana del IDE que el complemento de control de código fuente puede usar como elemento primario para los cuadros de diálogo que proporciona.

nFiles

[in] Número de archivos especificados en la lpFileNames matriz.

lpFileNames

[in] Matriz de nombres completos de archivos que se van a recuperar.

fOptions

[in] Marcas de comandos (SCC_GET_ALL, SCC_GET_RECURSIVE).

pvOptions

[in] Opciones específicas del complemento de control de código fuente.

Valor devuelto

Se espera que la implementación del complemento de control de código fuente de esta función devuelva uno de los siguientes valores:

Value Descripción
SCC_OK Operación de obtención correcta.
SCC_E_FILENOTCONTROLLED El archivo no está bajo control de código fuente.
SCC_E_OPNOTSUPPORTED El sistema de control de código fuente no admite esta operación.
SCC_E_FILEISCHECKEDOUT No se puede obtener el archivo que el usuario ha desprotegido actualmente.
SCC_E_ACCESSFAILURE Se produjo un problema al acceder al sistema de control de código fuente, probablemente debido a problemas de red o contención. Se recomienda un reintento.
SCC_E_NOSPECIFIEDVERSION Se especificó una versión o fecha y hora no válidas.
SCC_E_NONSPECIFICERROR Error no específico; el archivo no se sincronizó.
SCC_I_OPERATIONCANCELED Operación cancelada antes de la finalización.
SCC_E_NOTAUTHORIZED El usuario no está autorizado para realizar esta operación.

Comentarios

Se llama a esta función con un recuento y una matriz de nombres de los archivos que se van a recuperar. Si el IDE pasa la marca SCC_GET_ALL, esto significa que los elementos de lpFileNames no son archivos, sino directorios, y que se van a recuperar todos los archivos bajo control de código fuente en los directorios especificados.

La SCC_GET_ALL marca se puede combinar con la SCC_GET_RECURSIVE marca para recuperar todos los archivos de los directorios y todos los subdirectorios especificados.

Nota:

SCC_GET_RECURSIVE nunca debe pasarse sin SCC_GET_ALL. Además, tenga en cuenta que si los directorios C:\A y C:\A\B se pasan en una obtención recursiva, C:\A\B y todos sus subdirectorios se recuperarán realmente dos veces. Es responsabilidad del IDE (y no del complemento de control de código fuente) asegurarse de que los duplicados como este se mantienen fuera de la matriz.

Por último, incluso si un complemento de control de código fuente especificó la SCC_CAP_GET_NOUI marca en la inicialización, lo que indica que no tiene una interfaz de usuario para un comando Get, es posible que el IDE siga llamando a esta función para recuperar archivos. La marca simplemente significa que el IDE no muestra un elemento de menú Obtener y que no se espera que el complemento proporcione ninguna interfaz de usuario.

Cambiar el nombre de los archivos y SccGet

Situación: un usuario desprotete un archivo, por ejemplo, a.txt y lo modifica. Antes de que se pueda comprobar a.txt , un segundo usuario cambia el nombre de a.txt a b.txt en la base de datos de control de código fuente, desprotegirá b.txt, realizará algunas modificaciones en el archivo y comprobará el archivo. El primer usuario quiere los cambios realizados por el segundo usuario para que el primer usuario cambie el nombre de su versión local del archivo a b.txt y realice una obtención en el archivo. Sin embargo, la caché local que realiza un seguimiento de los números de versión sigue pensando que la primera versión de a.txt se almacena localmente y, por tanto, el control de código fuente no puede resolver las diferencias.

Hay dos maneras de resolver esta situación en la que la caché local de versiones de control de código fuente deja de sincronizarse con la base de datos de control de código fuente:

  1. No permita cambiar el nombre de un archivo en la base de datos de control de código fuente que está desprotegido actualmente.

  2. Realice el equivalente de "eliminar antiguo" seguido de "agregar nuevo". El siguiente algoritmo es una manera de lograrlo.

    1. Llame a la función SccQueryChanges para obtener información sobre el cambio de nombre de a.txt a b.txt en la base de datos de control de código fuente.

    2. Cambie el nombre de local a.txt a b.txt.

    3. Llame a la SccGet función para a.txt y b.txt.

    4. Dado que a.txt no existe en la base de datos de control de código fuente, la caché de versiones local se purga de la información de versión a.txt que falta.

    5. El archivo b.txt que se está desprotegido se combina con el contenido del archivo b.txt local.

    6. El archivo b.txt actualizado ahora se puede comprobar.

Consulte también