Veja neste post como colocar seus projetos Delphi 7 sob controle de versão no TFS e/ou VSTS.

(Parte 1 de 13 da série sobre controle de projetos legados no TFS)

O panorama do controle de versão sob o TFS mudou muito desde que foi introduzido o suporte a Git. Ter dois modelos tão distintos – o TFVC com a clássica abordagem centralizada e o Git com o novo mundo da descentralização – naturalmente afeta nossas opções, principalmente na hora de suportar tecnologias e IDEs antigos. O Delphi, como é de se esperar, não é exceção.

Assim, este post vai cobrir os dois cenários – uso de TFVC e uso de Git – para projetos Delphi. Comecemos pelo TFVC.

Integração TFVC e Delphi

O Delphi 7 vem de um tempo onde o “rei” dos controles de versão na plataforma Windows era – acredite se quiser! – o Visual SourceSafe.

(E acaba de me ocorrer que boa parte dos devs da Lambda3 deve nunca ter visto o VSS. Definitivamente estou ficando velho)

Isso significa que o IDE do Delphi 7 está otimizado para o SourceSafe e seu modelo centralizado de lock-modify-unlock (ou seja, o bom e velho “check out & check in”). Dessa forma, o TFVC se encaixa como uma luva na experiência de usuário oferecida pelo IDE do Delphi.

Ambiente e pré-requisitos

Para alinharmos as expectativas, é importante você saber como montei meu ambiente. Afinal, YMMV Smile

  • Windows 7 Ultimate, SP1, x86, 2GB RAM
  • Delphi 7 Enterprise

Agora, vamos falar um pouco sobre os pré-requisitos:

  • Team Explorer 2013: Qualquer integração com o TFS passa necessariamente pelo Team Explorer. Você pode baixá-lo do site da Microsoft (instalação gratuita para usuários licenciados de TFS e/ou VSTS). Se você já tem o Visual Studio 2013 instalado (Professional ou superior) então não é preciso instalar o Team Explorer à parte, pois ele já vem incluído com o VS.
  • Visual Studio Team Foundation Server MSSCCI Provider: O “MSSCCI Provider” (pronuncia-se “miss-kee”) oferece a integração entre o TFS e IDEs antigos que usam a interface MSSCCI (Microsoft Source Code Control Interface), criada para a integração com o SourceSafe. Em outras palavras, o provedor MSSCCI emula a interface criada para o SourceSafe, “enganando” IDEs antigos e fazendo-os acreditar que estão falando com o SourceSafe.
  • EPocalipse SourceConneXion: Plug-in de terceiros (ou seja, $$$ Smile) que faz a integração entre o Delphi e os provedores MSSCCI.

Essa integração toda se dá como no diagrama abaixo:

Diagrama de alto nível com os componentes da integração Delphi-TFS

Configuração dos plug-ins

Eis o processo de instalação dos diversos componentes necessários para habilitarmos a integração. Instale-os na ordem a seguir:

Team Explorer

Comece a instalação pelo Team Explorer (TE). Você pode usar o TE 2012 ou 2013 mas não o 2015. Em outras palavras: você até pode ter o TE (ou o VS) 2015 instalado na sua máquina, mas não será o bastante. Você ainda precisará instalar o TE (ou VS) 2012 ou 2013, pois o TFS MSSCCI Provider não funciona com o TE 2015.

O Team Explorer pode ser obtido de três maneiras diferentes:

  • Através de um download direto do site da Microsoft (2012, 2013);
  • Na mídia do Team Foundation Server de versão correspondente (ou seja, TFS 2012 == TE 2012, TFS 2013 == TE 2013);
  • Ou por meio da instalação do Visual Studio (Professional ou superior) de versão correspondente. Neste caso basta instalar o VS; o TE estará incluído na instalação.

Não há muito além disto. Escolha um dos três meios acima e depois é só next-next-finish.

DICA: Depois da instalação do Team Explorer, é sempre uma boa ideia instalar o Update do Visual Studio correspondente à versão do TE que você instalou, pois ele pode conter correções de bugs.
Instale o Update 5 no TE 2012 ou o Update 5 no 2013.

Visual Studio Team Foundation Server MSSCCI Provider

O que deveria ser uma instalação bem simples pode se tornar um processo um pouco confuso. Isso porque há duas versões do TFS MSSCCI Provider disponíveis no Visual Studio Marketplace:

A diferença entre ambos é a versão do Team Explorer de que cada um depende. Via de regra, use a versão 2010 se você precisar instalar no Windows XP. Para versões mais recentes do Windows (como no nosso caso, em que estamos usando o Windows 7) use a versão 2013&2015 (que funciona tanto com o TE 2013 quanto com o 2015). Baixe a versão correta e depois é só next-next-finish.

DICA: Às vezes pode ser necessário trocar o Provedor MSSCCI padrão no seu computador. Isso é especialmente verdade se você tiver outro provedor MSSCCI (como o SourceSafe) instalado. Para poder usar o TFS, você deve definir o seu provedor MSSCCI como o padrão. O único detalhe é que não há nenhuma forma nativa de fazer isso.
Você pode definir o provedor padrão diretamente no Registry ou então baixar um dentre os diversos utilitários disponíveis para isso. No passado eu já usei o SccSwitch, mas foi descontinuado. Nas minhas pesquisas para este post, encontrei este no CodeProject.
Na dúvida, prefiro ir direto no Registry e editar na mão.

EPocalipse SourceConneXion

Como comentei anteriormente, o SourceConneXion – peça-chave para a integração com o TFS – é pago. A versão para Delphi 7 custa 49 euros. Ah, antes que alguém pergunte: Nem eu nem a Lambda3 temos qualquer tipo de vínculo comercial com a empresa EPocalipse. Estou indicando o plug-in deles simplesmente porque foi a única opção que encontrei para integrar o Delphi com o TFS. O lado bom é que você pode baixar uma versão trial de trinta dias.

Depois de uma instalação padrão next-next-finish, ao abrir o Delphi pela primeira vez após a instalação será exibida a tela de configuração inicial do SourceConneXion:

Tela de configuração inicial do SourceConneXion

Na etapa seguinte o SourceConneXion pergunta qual provedor MSSCCI você vai usar. Selecione o TFS:

Selecionando o provedor MSSCCI integrado ao SourceConneXion

Daí é a hora de configurar opções específicas do provedor MSSCCI em uso. No caso do TFS, ele dá a opção de configurar o modelo padrão de bloqueio de arquivos. O comportamento padrão do TFS é “None” (copy-modify-merge). Se você preferir o modelo de checkout exclusivo do SourceSafe, selecione a opção “Check Out” (lock-modify-unlock).

Configurando o modelo padrão de bloqueio de arquivos do TFS

Lembra que o SourceConneXion permite que você integre o Delphi a qualquer controle de versão que suporte a API MSSCCI, certo? Por isso, um usuário pode ligar o Delphi a diferentes controles de versão que, por sua vez, podem usar nomes distintos para a mesma operação. Imagine, como exemplo, “Check In” no TFVC e “Commit” no Subversion.

Para lidar com essas diferenças, o SourceConneXion permite que você personalize os termos que serão usados na sua interface. Assim, você pode usar a nomenclatura correspondente ao seu sistema de controle de versão. Por uma feliz coincidência, ele usa por padrão os mesmos termos do TFS; portanto, você pode aceitar as sugestões oferecidas.

Personalizando a terminologia do sistema de controle de versão no SourceConneXion

Com isso está concluída a configuração inicial. Repare que agora há um menu chamado Source Control no Delphi, que oferece acesso aos recursos do TFS. É através dele que iremos adicionar nosso projeto a um repositório TFVC:

Adicionando um projeto Delphi pela primeira vez a um repositório TFVC

Agora, indique o servidor (na verdade a Team Project Collection) e então selecione o Team Project onde o projeto será adicionado:

Selecionando o Team Project para adicionar o projeto Delphi

Depois é hora de indicar quais arquivos do seu projeto serão adicionados ao controle de versão. Tipicamente você vai querer adicionar todos:

Indicando quais arquivos de projeto devem ser adicionados ao controle de versão

E finalmente uma tela familiar para quem está acostumado com o TFS. Olha a tela padrão de check-in do TFVC aí! Smile

Caixa de diálogo padrão de check-in do TFS

Nela temos à disposição todos os recursos que o TFVC oferece para nossos projetos: Associação com itens de trabalho, políticas de check-in, notas de check-in… Integração completa!

Confirme o check-in e pronto. Nosso projeto Delphi está sob controle de versão no TFS!

Legal, né? :-)

 

Daqui para a frente, use o menu Source Control para interagir com o TFS a partir do IDE do Delphi:

Menu Source Control com os comandos de integração com o TFS

Uma das coisas bacanas de se ter uma integração nativa com o controle de versão diretamente no IDE é conseguir ter acesso fácil ao histórico de alterações. No menu Source Control, selecione o comando Show Difference para abrir a caixa de diálogo de histórico. Aqui, você pode selecionar dois changesets diferentes para comparar as alterações entre as duas versões:

Caixa de diálogo de histórico de versões, mostrando dois changesets selecionados

Clique com o botão direito sobre um dos changesets selecionados e então clique no comando Compare. Será aberta uma janela do Visual Studio com o diff entre as duas versões do arquivo escolhido:

Visualizando a diferença entre duas versões de um arquivo Delphi

Bacana, né? Agora, pode ser que seu time prefira usar o Git. Nesse caso, vamos ver como ligar o Delphi a um repositório Git do TFS.

Integração Git e Delphi

Agora vamos falar de Git? Smile

Usar o Git do TFS não é diferente de usar o Git do GitHub, GitLab ou qualquer outro serviço/servidor remoto de Git. No fim do dia, todos eles são simplesmente um “remote” com o qual você sincroniza (pull/push) seu clone local.

A primeira providência é instalar o cliente de Git no seu computador. Instale o Git for Windows, que já vem com o Credential Manager da Microsoft (que facilita muito a vida de quem usa TFS e/ou VSTS).

Clonando o repositório

No Git, tudo começa a partir da operação de Clone – ou seja, a “cópia” de um repositório remoto (juntamente com seu histórico) – para o computador local. Para clonar um repositório, é preciso obter seu URL de clone. No TFS, você encontra essa informação na interface Web:

Para obter o URL de clone, navegue até o repositório Git através da opção Code. Então, clique em Clone (1) e copie o URL de clone (2)

Agora, clone o repositório localmente. Abra um prompt de comando, crie uma pasta local e execute o seguinte comando:

git clone http://vsalm:8080/tfs/DefaultCollection/_git/DelphiTP

.gitignore

Umas das coisas mais importantes na configuração do Git para uma determinada linguagem de programação e/ou IDE é o arquivo .gitignore. Ele determina quais arquivos devem ser ignorados pelo Git, de modo a não “sujar” o controle de versão. Arquivos temporários, outputs de compilação etc. variam de linguagem para linguagem e precisam de um gitignore correspondente. Para o Delphi, você pode encontrar um .gitignore aqui. Para “instalar” o arquivo .gitignore, salve-o com o nome .gitignore (assim mesmo, começando com um ponto) na raíz do diretório onde você clonou o repositório Git, adicione-o (git add) e salve-o (git commit) no controle de versão. Na próxima operação de git add, esses arquivos serão ignorados.

E o IDE?

Ainda que o recomendado pela maioria dos usuários de Git seja sempre “use a linha de comando!”, usuários de IDEs RAD como Delphi e Visual Basic preferem ficar no IDE a maior parte do tempo. Para aqueles que preferem a interface gráfica, uma opção é usar o Git SCC Proxy da PushOk. Ele também emula a API MSSCCI e, portanto, integra-se ao IDE através do SourceConneXion:

Caixa de diálogo "Provider Configuration" do SourceConneXion, listando os provedores MSSCCI disponíveis

Tal como acontece com o TFVC, adicionar um plug-in MSSCCI para o Git traz recursos específicos do provedor para dentro do IDE. Por exemplo, veja a janela de histórico do Git SCC:

Caixa de diálogo de histórico de arquivos com o PushOk

Mas eu ainda não sei usar o Git!

Como a internet está repleta de artigos sobre como usar o Git no dia-a-dia de projetos Delphi, acaba sendo um pouco “mais do mesmo” entrar em detalhes aqui. Por isso, sugiro dois materiais de estudo para você usar como ponto de partida:

Conclusão

Viu como integrar o Delphi com o TFS pode ser mais simples do que você imaginava? Sim, o setup inicial dá um certo trabalho mas acredito que o resultado pode ser bem compensador. Experimente!

Ah, e não deixe de compartilhar sua opinião nos comentários do post!

 

Um abraço
Igor

 

(Cross-post de http://www.tshooter.com.br/2016/10/06/controle-de-verso-de-projetos-delphi-7-no-tfs/)