Funzione SccGet

Questa funzione recupera una copia di uno o più file per la visualizzazione e la compilazione, ma non per la modifica. Nella maggior parte dei sistemi, i file vengono contrassegnati come di sola lettura.

Sintassi

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

Parametri

pvContext

[in] Struttura del contesto del plug-in del controllo del codice sorgente.

hWnd

[in] Handle per la finestra dell'IDE che il plug-in del controllo del codice sorgente può usare come elemento padre per qualsiasi finestra di dialogo fornita.

nFiles

[in] Numero di file specificati nella lpFileNames matrice.

lpFileNames

[in] Matrice di nomi completi di file da recuperare.

fOptions

[in] Flag di comando (SCC_GET_ALL, SCC_GET_RECURSIVE).

pvOptions

[in] Opzioni specifiche del plug-in del controllo del codice sorgente.

Valore restituito

L'implementazione del plug-in del controllo del codice sorgente di questa funzione dovrebbe restituire uno dei valori seguenti:

Valore Descrizione
SCC_OK Esito positivo dell'operazione get.
SCC_E_FILENOTCONTROLLED Il file non è sotto il controllo del codice sorgente.
SCC_E_OPNOTSUPPORTED Il sistema di controllo del codice sorgente non supporta questa operazione.
SCC_E_FILEISCHECKEDOUT Impossibile ottenere il file estratto dall'utente.
SCC_E_ACCESSFAILURE Si è verificato un problema durante l'accesso al sistema di controllo del codice sorgente, probabilmente a causa di problemi di rete o contesa. È consigliabile riprovare.
SCC_E_NOSPECIFIEDVERSION È stata specificata una versione o una data/ora non valida.
SCC_E_NONSPECIFICERROR Errore non specifico; file non sincronizzato.
SCC_I_OPERATIONCANCELED Operazione annullata prima del completamento.
SCC_E_NOTAUTHORIZED L'utente non è autorizzato a eseguire questa operazione.

Osservazioni:

Questa funzione viene chiamata con un conteggio e una matrice di nomi dei file da recuperare. Se l'IDE passa il flag SCC_GET_ALL, ciò significa che gli elementi in lpFileNames non sono file ma directory e che tutti i file nel controllo del codice sorgente nelle directory indicate devono essere recuperati.

Il SCC_GET_ALL flag può essere combinato con il SCC_GET_RECURSIVE flag per recuperare tutti i file nelle directory e in tutte le sottodirectory.

Nota

SCC_GET_RECURSIVE non deve mai essere passato senza SCC_GET_ALL. Si noti inoltre che se le directory C:\A e C:\A\B vengono entrambe passate in un get ricorsivo, C:\A\B e tutte le relative sottodirectory verranno effettivamente recuperate due volte. È responsabilità dell'IDE, e non del plug-in del controllo del codice sorgente, assicurarsi che i duplicati come questo vengano mantenuti fuori dalla matrice.

Infine, anche se un plug-in del controllo del codice sorgente ha specificato il SCC_CAP_GET_NOUI flag sull'inizializzazione, a indicare che non dispone di un'interfaccia utente per un comando Get, questa funzione può comunque essere chiamata dall'IDE per recuperare i file. Il flag significa semplicemente che l'IDE non visualizza una voce di menu Get e che il plug-in non deve fornire alcuna interfaccia utente.

Rinominare i file e SccGet

Situazione: un utente estrae un file, ad esempio a.txt, e lo modifica. Prima di poter archiviare a.txt , un secondo utente rinomina a.txt in b.txt nel database di controllo del codice sorgente, estrae b.txt, apporta alcune modifiche al file e archivia il file. Il primo utente vuole apportare le modifiche apportate dal secondo utente in modo che il primo utente rinomina la versione locale del file a.txt in b.txt e esegue un'operazione get sul file. Tuttavia, la cache locale che tiene traccia dei numeri di versione ritiene comunque che la prima versione di a.txt sia archiviata localmente e quindi il controllo del codice sorgente non possa risolvere le differenze.

Esistono due modi per risolvere questa situazione in cui la cache locale delle versioni del controllo del codice sorgente non viene sincronizzata con il database di controllo del codice sorgente:

  1. Non consentire la ridenominazione di un file nel database di controllo del codice sorgente attualmente estratto.

  2. Eseguire l'equivalente di "delete old" seguito da "add new". L'algoritmo seguente è un modo per eseguire questa operazione.

    1. Chiamare la funzione SccQueryChanges per informazioni sulla ridenominazione di a.txt in b.txt nel database del controllo del codice sorgente.

    2. Rinominare il file a.txt locale in b.txt.

    3. Chiamare la SccGet funzione sia per a.txt che per b.txt.

    4. Poiché il file a.txt non esiste nel database del controllo del codice sorgente, la cache della versione locale viene rimossa dalle informazioni sulla versione di a.txt mancanti.

    5. Il file b.txt estratto viene unito al contenuto del file b.txt locale.

    6. Il file b.txt aggiornato può ora essere archiviato.

Vedi anche