Fonction SccGet
Cette fonction récupère une copie d’un ou plusieurs fichiers pour l’affichage et la compilation, mais pas pour la modification. Dans la plupart des systèmes, les fichiers sont étiquetés en lecture seule.
Syntaxe
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
Paramètres
pvContext
[in] Structure de contexte du plug-in de contrôle de code source.
hWnd
[in] Handle vers la fenêtre IDE que le plug-in de contrôle de code source peut utiliser comme parent pour toutes les boîtes de dialogue qu’il fournit.
nFiles
[in] Nombre de fichiers spécifiés dans le lpFileNames
tableau.
lpFileNames
[in] Tableau de noms complets de fichiers à récupérer.
fOptions
[in] Indicateurs de commande (SCC_GET_ALL
, SCC_GET_RECURSIVE
).
pvOptions
[in] Options spécifiques au plug-in de contrôle de code source.
Valeur retournée
L’implémentation du plug-in de contrôle de code source de cette fonction est censée retourner l’une des valeurs suivantes :
Valeur | Description |
---|---|
SCC_OK | Réussite de l’opération d’obtention. |
SCC_E_FILENOTCONTROLLED | Le fichier n’est pas sous contrôle de code source. |
SCC_E_OPNOTSUPPORTED | Le système de contrôle de code source ne prend pas en charge cette opération. |
SCC_E_FILEISCHECKEDOUT | Impossible d’obtenir le fichier que l’utilisateur a actuellement case activée sorti. |
SCC_E_ACCESSFAILURE | Il y a eu un problème d’accès au système de contrôle de code source, probablement en raison de problèmes de réseau ou de contention. Une nouvelle tentative est recommandée. |
SCC_E_NOSPECIFIEDVERSION | Spécification d’une version ou d’une date/heure non valide. |
SCC_E_NONSPECIFICERROR | Échec non spécifique ; le fichier n’a pas été synchronisé. |
SCC_I_OPERATIONCANCELED | Opération annulée avant la fin. |
SCC_E_NOTAUTHORIZED | L’utilisateur n’est pas autorisé à effectuer cette opération. |
Notes
Cette fonction est appelée avec un nombre et un tableau de noms des fichiers à récupérer. Si l’IDE passe l’indicateur SCC_GET_ALL
, cela signifie que les éléments contenus lpFileNames
ne sont pas des fichiers, mais des répertoires, et que tous les fichiers sous contrôle de code source dans les répertoires donnés doivent être récupérés.
L’indicateur SCC_GET_ALL
peut également être combiné avec l’indicateur SCC_GET_RECURSIVE
pour récupérer tous les fichiers dans les répertoires donnés et tous les sous-répertoires.
Remarque
SCC_GET_RECURSIVE
ne devrait jamais être passé sans SCC_GET_ALL
. Notez également que si les répertoires C :\A et C :\A\B sont tous deux transmis sur une obtention récursive, C :\A\B et que tous ses sous-répertoires sont réellement récupérés deux fois. Il incombe à l’IDE, et non pas au plug-in de contrôle de code source, de s’assurer que les doublons tels que ceux-ci sont conservés hors du tableau.
Enfin, même si un plug-in de contrôle de code source a spécifié l’indicateur lors de l’initialisation SCC_CAP_GET_NOUI
, indiquant qu’il n’a pas d’interface utilisateur pour une commande Get, cette fonction peut toujours être appelée par l’IDE pour récupérer des fichiers. L’indicateur signifie simplement que l’IDE n’affiche pas d’élément de menu Get et que le plug-in n’est pas censé fournir une interface utilisateur.
Renommer des fichiers et SccGet
Situation : un utilisateur case activée sortir un fichier, par exemple a.txt et le modifie. Avant qu’a.txt puisse être case activée, un deuxième utilisateur renomme a.txt en b.txt dans la base de données de contrôle de code source, case activée s out b.txt, apporte des modifications au fichier et case activée le fichier dans. Le premier utilisateur souhaite les modifications apportées par le deuxième utilisateur afin que le premier utilisateur renomme sa version locale d’un fichier .txt en b.txt et effectue une obtention sur le fichier. Toutefois, le cache local qui effectue le suivi des numéros de version pense toujours que la première version d’a.txt est stockée localement et donc le contrôle de code source ne peut pas résoudre les différences.
Il existe deux façons de résoudre cette situation où le cache local des versions de contrôle de code source devient obsolète avec la base de données de contrôle de code source :
N’autorisez pas le changement de nom d’un fichier dans la base de données de contrôle de code source actuellement case activée out.
Effectuez l’équivalent de « supprimer l’ancien » suivi de « ajouter nouveau ». L’algorithme suivant est un moyen d’y parvenir.
Appelez la fonction SccQueryChanges pour en savoir plus sur le changement de nom d’a.txt à b.txt dans la base de données de contrôle de code source.
Renommez le fichier a.txt local en b.txt.
Appelez la
SccGet
fonction pour a.txt et b.txt.Étant donné qu’a.txt n’existe pas dans la base de données de contrôle de code source, le cache de version local est vidé des informations manquantes sur la version a.txt.
Le fichier b.txt en cours d’case activée est fusionné avec le contenu du fichier b.txt local.
Le fichier b.txt mis à jour peut maintenant être case activée dans.