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:
No permita cambiar el nombre de un archivo en la base de datos de control de código fuente que está desprotegido actualmente.
Realice el equivalente de "eliminar antiguo" seguido de "agregar nuevo". El siguiente algoritmo es una manera de lograrlo.
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.
Cambie el nombre de local a.txt a b.txt.
Llame a la
SccGet
función para a.txt y b.txt.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.
El archivo b.txt que se está desprotegido se combina con el contenido del archivo b.txt local.
El archivo b.txt actualizado ahora se puede comprobar.