Nova categoria: Team Coherence
Criei uma nova categoria chamada Team Coherence, pois publiquei quatro posts sobre este software e acho interessante separá-los para facilitar a procura pelo conteúdo.
É isso ae. Até +.
Team Coherence: utilizando a TC Tracker API
Para quem ainda não conhece, o TC Tracker é um dos módulos do Team Coherence (veja mais sobre o TC neste post). Ele é responsável pela gerência de requisições e bugs.
O próprio cliente do TC já oferece uma interface muito agradável e prática para trabalhar com o Tracker. No entanto, também está disponível uma API que implementa (ou melhor, disponibiliza, pois faz chamas às rotinas nativas) todas as funcionalidades que existem no servidor do TC. Desta forma, é possível criar um sistema de controle de requisições e bugs de acordo com as necessidades do usuário.
Esta API é escrita em Delphi e, como dito anteriormente, faz chamadas às rotinas nativas utilizando stdcall. O download é gratuito e pode ser feito aqui.
Para utilizá-la, basta fazer o download, descompactar e copiar os .pas para o diretório com os fontes do projeto. Abaixo segue um exemplo bem simples que mostra como conectar no servidor do TC e listar os projetos cadastrados:
1 procedure TfrmPrincipal.btnGoClick(Sender: TObject); 2 var 3 conn, 4 user: string; 5 connected: boolean; 6 result: integer; 7 begin 8 try 9 result := TrkConnect('Local', 'Marcos', 'xxxxx'); 10 if (result <> Err_OK) then 11 ShowMessage('Erro ao conectar: ' + IntToStr(result)); 12 13 cdsProjetos.EmptyDataSet; 14 result := TrkEnumProjects(AdicionaProjeto, cdsProjetos); 15 if (result <> Err_OK) then 16 ShowMessage('Erro ao listar os projetos: ' + 17 IntToStr(result)) 18 finally 19 TrkCurrentConnection(conn, user, connected); 20 if (connected) then 21 begin 22 result := TrkDisconnect; 23 if (result <> Err_OK) then 24 ShowMessage('Erro ao desconectar: ' + IntToStr(result)); 25 end; 26 end; 27 end;
Na linha 9, faço uma chamada à função TrkConnect passando o nome da conexão, usuário e senha.
Na linha 14, chamo a função TrkEnumProjects para retornar todos os projetos cadastrados. Ela recebe dois parâmetros: uma função que trata o que será feito com cada projeto retornado e um ponteiro para alguma informação extra, neste caso, um DataSet. A rotina que passei como parâmetro deve seguir a seguinte assinatura:
1 function (data: Pointer; name: string; id: Cardinal): boolean;
Sua implementação simplesmente adiciona o projeto em questão ao DataSet e retorna true para continuar o processo:
1 function AdicionaProjeto(data: Pointer; name: 2 string; id: Cardinal): boolean; 3 begin 4 TClientDataSet(data).Append; 5 TClientDataSet(data).FieldByName('id').AsInteger := id; 6 TClientDataSet(data).FieldByName('name').AsString := name; 7 TClientDataSet(data).Post; 8 9 Result := true; 10 end;
O resultado final é apresentado abaixo:
Existem várias outras rotinas disponíveis para acessar o TC Tracker. Todas elas bem documentadas e de fácil uso. Além disso, também está disponível uma API para acessar o controle de versão (Version Manager). O download desta pode ser feito aqui.
É isso ai. T+
Team Coherence: Removendo o log dos fontes
Este post é uma continuação da série sobre o Team Coherence (TC). Os outros estão aqui:
Por padrão, o TC armazena o log das alterações no próprio código fonte, como apresentado na imagem abaixo:
Isso causa um grande problema aos desenvolvedores: após um longo tempo de uso, praticamente 50% do que está escrito no arquivo é referente ao log do TC. Desta forma, ao abrir um determinado fonte, é necessário utilizar a tecla Page Down até o fim do log, o que às vezes torna-se muito chato, pois isso normalmente é realizado várias vezes durante o dia.
No próprio cliente do TC é possível configurar para que este log não apareça mais nos arquivos. Para fazer isso, no menu Tools existe a opção File Groups (vide imagem abaixo).
Como exemplo, utilizarei o item Delphi Unit Files. Basta clicar sobre ele e escolher a opção Modify. Na tela que aparecerá, o campo Expand keywords in files with the following extensions deve ficar em branco, tal como apresentado na imagem abaixo:
Desta forma, sempre que um Check In for feito o comentário não aparecerá no código fonte, mas continuará disponível no TC.
Além desta opção, também é possível personalizar o Header que é incluído no primeiro Check In de cada arquivo. Para isto, clique sobre o botão Header e personalize da forma que desejar. Além do texto “fixo”, também estão disponíveis algumas Keywords que durante o Check In terão seu valor alterado de acordo com a situação. São elas:
- $Log: será substituída pela revisão e versão do arquivo;
- $Revision: número da revisão;
- $Version: número da versão;
- $Author: autor que fez o Check In;
- $RevDate: data da revisão;
- $RevComments: comentário da revisão;
- $ModDate: data de modificação do arquivo;
- $ProjectName: nome do projeto em questão;
- $NoExpand: nenhuma keyword será substituída a partir deste ponto.
A palavra chave deve ser utilizada com os dois pontos (:). Exemplo:
É isso aí! T+
Sincronização de arquivos com o Team Coherence
Além do gerenciamento de arquivos (versão, controle de acesso, etc.), o Team Coherence (TC) também é capaz de manter arquivos locais sincronizados com o servidor.
Em um post no início deste mês, falei sobre como utilizar o TC para gerar Builds automatizados. Neste, vou comentar sobre as duas formas de manter um projeto local sincronizado com o servidor.
Vamos lá.
Get: esta é a forma mais óbvia que existe, tanto é que eu a utilizava até esses dias. Basta navegar até o projeto desejado, verificar quais arquivos não estão sincronizados, selecioná-los, clicar com o botão direito sobre a lista selecionada e escolher a opção Get;
Synchronize with view: essa opção descobri recentemente. Basta selecionar um ou vários projetos, clicar com o botão direito sobre eles e clicar em Synchronize with view. De acordo com o help do TC, todos os arquivos Out of Date ou Missing serão sincronizados. Os arquivos marcados como Modified serão ignorados. Entretanto, é possível fazer com que eles entrem nesse processo através da opção Tools/Options/Other/Include Modified (not locked) files when Synchronizing (veja na imagem abaixo). Como pode ser visto, os arquivos locados serão ignorados.
Tudo isso aí na prática funciona assim:
- Chefe pede um build dos projetos;
- Programador vai até o gerenciador de fontes e atualiza todos os projetos utilizando uma das opções acima;
- Programador faz o build de todos os projetos utilizando o recurso Automated Build Utility.
É isso aí! T+
Builds automatizados usando o Team Coherence
Gerar o build (ou efetuar a compilação) de vários projetos é uma tarefa chata e que leva certo tempo. Muitas vezes, como aqui na empresa, também é uma tarefa repetitiva.
Com o intuito de “trabalhar menos e render mais”, acabei descobrindo que o nosso Sistema de Controle de Versão, o Team Coherence, suporta a geração de builds automatizados para os projetos escritos em Delphi (aparentemente suporta para qualquer compilador, mas não entrei em detalhes).
Existe uma funcionalidade chamada Automated Build Utility onde o desenvolvedor pode criar uma seqüência de projetos e executar o build em cada um deles separadamente ou tudo de uma vez só.
Um exemplo:

Ao clicar em File / Execute Package, o Team Coherence iniciará o build pelo projeto Configurador. Após terminar, vai ao Orçamento e assim sucessivamente.
Para criar um projeto deste tipo, basta usar um objeto do menu à esquerda de acordo com o Compilador em questão (usei o Delphi 6 Project). Após isso, duplo clique sobre ele e é preciso definir o Project file na aba General. Ao carregar o dpr, o próprio Team Coherence se encarrega de buscar algumas configurações, tais como: Output directory, Unit output directory, etc.
Para ter os projetos funcionando aqui, foi preciso definir o Search path com o mesmo valor do Library Path do Delphi.
Essas setas verdes entre os projetos indicam uma relação de ordem na compilação, ou seja, primeiro compila o Configurador, depois o Orçamento e por aí vai. Elas são chamadas de Workflow.
É isso aí! T+



