Obtenha credenciais de Sharpsvn em C#
-
20-09-2019 - |
Pergunta
Estou escrevendo algum código C# para executar várias confirmações com o SVN em uma passagem, bem como a ferramenta svnmucc. Até agora, tenho usado o Sharpsvn para fazer o restante da comunicação necessária com o SVN, então estou pensando que posso aproveitar isso para realizar o seguinte:
Como posso obter as credenciais (nome de usuário, senha) que são usadas pelo Sharpsvn?
Eu gostaria de fazer algo assim:
using (SvnClient svnClient = new SvnClient())
{
SomeFictitiousCredentialsClass credentials = svnClient.Authentication.FictitiousGetCachedCredentialsMethod();
// Call my code that performs svnmucc-like work here, passing username and password
// obtained from 'credentials' variable.
}
Solução
O SharpsVN não possui uma API que fornece as credenciais da subversão. Ele implementa principalmente a API libsvn_client e, nesse nível, não há acesso a esses dados.
SharpsVn recebe um retorno de chamada das bibliotecas de subversão quando essas necessidades de credenciais; Na maioria dos casos, após o armazenamento de senha incorporado falha em autenticar.
Se o seu código SVNMUCC também usar as APIs de subversão, basta plugin os manipuladores de autenticação predefinidos por subversão.
O próprio Sharpsvn ainda não possui suporte ao SVNMUCC. (Houve alguma conversa sobre alguém que gostava de adicionar isso ao Sharpsvn, mas não tenho notícias sobre isso ultimamente)
Outras dicas
Embora a outra resposta ainda seja válida para todas as versões atuais do SharpsVN, o suporte ao SVNMUCC acaba de chegar ao código de desenvolvimento da SharpsVN. Assim, será possível executar operações do SVNMUCC no .NET.
using SharpSvn;
SvnCommitResult cr;
using (SvnMultiCommandClient mucc = new SvnMultiCommandClient("http://my-repos/svn/"))
{
mucc.CreateDirectory("trunk");
mucc.CreateDirectory("branches");
mucc.CreateDirectory("tags");
mucc.CreateDirectory("trunk/src");
mucc.SetProperty("", "svn:auto-props", "*.cs = svn:eol-style=native");
mucc.SetProperty("", "svn:global-ignores", "bin obj");
mucc.Commit(out cr); // Commit r1
}
using (SvnClient client = new SvnClient())
{
client.CheckOut("http://my-repos/svn/", @"C:\wc");
}
Há uma sintaxe ligeiramente diferente disponível se você deseja executar a operação de um SVNCLIENT existente, mas essa é a ideia geral.