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 :

  1. 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.

  2. Effectuez l’équivalent de « supprimer l’ancien » suivi de « ajouter nouveau ». L’algorithme suivant est un moyen d’y parvenir.

    1. 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.

    2. Renommez le fichier a.txt local en b.txt.

    3. Appelez la SccGet fonction pour a.txt et b.txt.

    4. É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.

    5. Le fichier b.txt en cours d’case activée est fusionné avec le contenu du fichier b.txt local.

    6. Le fichier b.txt mis à jour peut maintenant être case activée dans.

Voir aussi