Partilhar via


Função SccGet

Esta função recupera uma cópia de um ou mais arquivos para visualização e compilação, mas não para edição. Na maioria dos sistemas, os arquivos são marcados como somente leitura.

Sintaxe

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

Parâmetros

pvContexto

[em] A estrutura de contexto do plug-in de controle do código-fonte.

hWnd

[em] Um identificador para a janela do IDE que o plug-in de controle do código-fonte pode usar como pai para quaisquer caixas de diálogo que ele forneça.

nArquivos

[em] Número de arquivos especificados na lpFileNames matriz.

lpFileNames

[em] Matriz de nomes totalmente qualificados de arquivos a serem recuperados.

fOpções

[em] Sinalizadores de comando (SCC_GET_ALL, SCC_GET_RECURSIVE).

pvOpções

[em] Opções específicas do plug-in de controle do código-fonte.

Valor retornado

Espera-se que a implementação do plug-in de controle do código-fonte dessa função retorne um dos seguintes valores:

Valor Descrição
SCC_OK Sucesso da operação.
SCC_E_FILENOTCONTROLLED O arquivo não está sob controle do código-fonte.
SCC_E_OPNOTSUPPORTED O sistema de controle do código-fonte não oferece suporte a essa operação.
SCC_E_FILEISCHECKEDOUT Não é possível obter o arquivo que o usuário fez check-out no momento.
SCC_E_ACCESSFAILURE Houve um problema ao acessar o sistema de controle do código-fonte, provavelmente devido a problemas de rede ou contenção. Recomenda-se uma nova tentativa.
SCC_E_NOSPECIFIEDVERSION Especificada uma versão ou data/hora inválida.
SCC_E_NONSPECIFICERROR Falha inespecífica; arquivo não foi sincronizado.
SCC_I_OPERATIONCANCELED Operação cancelada antes da conclusão.
SCC_E_NOTAUTHORIZED O usuário não está autorizado a realizar esta operação.

Comentários

Essa função é chamada com uma contagem e uma matriz de nomes dos arquivos a serem recuperados. Se o IDE passar o sinalizador SCC_GET_ALL, isso significa que os itens em lpFileNames não são arquivos, mas diretórios, e que todos os arquivos sob controle do código-fonte nos diretórios fornecidos devem ser recuperados.

O SCC_GET_ALL sinalizador pode ser combinado com o SCC_GET_RECURSIVE sinalizador para recuperar todos os arquivos nos diretórios fornecidos e todos os subdiretórios também.

Observação

SCC_GET_RECURSIVE nunca deve ser passado sem SCC_GET_ALL. Além disso, observe que se os diretórios C:\A e C:\A\B forem passados em um get recursivo, C:\A\B e todos os seus subdiretórios serão recuperados duas vezes. É responsabilidade do IDE — e não do plug-in de controle do código-fonte — garantir que duplicatas como essa sejam mantidas fora do array.

Finalmente, mesmo que um plug-in de controle do código-fonte tenha especificado o SCC_CAP_GET_NOUI sinalizador na inicialização, indicando que ele não tem uma interface de usuário para um comando Get, essa função ainda pode ser chamada pelo IDE para recuperar arquivos. O sinalizador simplesmente significa que o IDE não exibe um item de menu Obter e que o plug-in não deve fornecer nenhuma interface do usuário.

Renomear arquivos e SccGet

Situação: um usuário faz check-out de um arquivo, por exemplo, a.txt, e o modifica. Antes que a.txt possa ser verificado, um segundo usuário renomeia a.txt para b.txt no banco de dados de controle de origem, faz check-out de b.txt, faz algumas modificações no arquivo e faz check-in do arquivo. O primeiro usuário deseja as alterações feitas pelo segundo usuário para que o primeiro usuário renomeie sua versão local de um arquivo .txt para b.txt e faça um get no arquivo. No entanto, o cache local que controla os números de versão ainda acha que a primeira versão de um.txt é armazenada localmente e, portanto, o controle do código-fonte não pode resolver as diferenças.

Há duas maneiras de resolver essa situação em que o cache local das versões de controle do código-fonte fica fora de sincronia com o banco de dados de controle do código-fonte:

  1. Não permita renomear um arquivo no banco de dados de controle de origem com check-out no momento.

  2. Faça o equivalente a "excluir antigo" seguido de "adicionar novo". O algoritmo a seguir é uma maneira de fazer isso.

    1. Chame a função SccQueryChanges para saber mais sobre a renomeação de a.txt para b.txt no banco de dados de controle de origem.

    2. Renomeie o local a.txt para b.txt.

    3. Chame a função para aSccGet.txt e b.txt.

    4. Como a.txt não existe no banco de dados de controle de origem, o cache de versão local é limpo das informações de versão a.txt ausentes.

    5. O arquivo b.txt que está sendo submetido a check-out é mesclado com o conteúdo do arquivo b.txt local.

    6. O arquivo b.txt atualizado agora pode ser verificado.

Confira também