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/)

Igor Abade

Igor Abade V. Leite ([email protected]) é Microsoft MVP (Most Valuable Professional) de Visual Studio ALM desde 2006. Palestrante em diversos eventos da comunidade de desenvolvimento de software (TechEd Brasil, The Developers’ Conference, DevOps Summit Brasil, Agile Brazil, Visual Studio Summit, QCON e outros), é também autor de artigos em revistas e sites como o MSDN Brasil. Desde março de 2011 é um dos sócios da Lambda3, uma consultoria especializada em ALM, desenvolvimento de software e treinamentos. Siga-o no Twitter @igorabade.