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:
Não permita renomear um arquivo no banco de dados de controle de origem com check-out no momento.
Faça o equivalente a "excluir antigo" seguido de "adicionar novo". O algoritmo a seguir é uma maneira de fazer isso.
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.
Renomeie o local a.txt para b.txt.
Chame a função para a
SccGet
.txt e b.txt.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.
O arquivo b.txt que está sendo submetido a check-out é mesclado com o conteúdo do arquivo b.txt local.
O arquivo b.txt atualizado agora pode ser verificado.