Desenvolvimento

26 jun, 2012

Conheça a nova funcionalidade do Team Foundation Server 2012: Asynchronous Checkout

Publicidade

Com o lançamento do Team Foundation Server 2012, nós ganhamos uma funcionalidade muito interessante, denominada “Asynchronous Checkout”. Desde as primeiras versões do TFS, toda comunicação com o servidor já era baseada em http, permitindo que desenvolvedores trabalhassem em todos os cantos usando a Internet como meio de integração.

O Team Foundation Server 2012 utiliza basicamente duas maneiras de trabalho com o código fonte: uma chamada de “local workspace” e outra chamada de “server workspace”. A opção mais comum e recomendada de uso é o modelo local, que traz os arquivos com os quais você vai trabalhar para uma pasta local e depois fica gerenciando apenas as alterações; necessitando sincronizar apenas os arquivos alterados, reduzindo grande parte da comunicação com o servidor e permitindo o uso do TFS Offline – o que garante as operações básicas (add, edit, rename, delete, undo, diff). 

Já no modo server, os arquivos ficam centralizados no servidor, eliminando a necessidade de baixar o projeto completo. Porém, ele não funciona em caso de queda de conexão, o que trava o projeto e não permite fazer alterações. Esse modelo é recomendado para projetos grandes, com muitos arquivos e onde o cliente local não tem muito espaço em disco.

Quando falamos de WorkSpace, ou seja, “espaço de trabalho”, não estamos falando sobre o modelo de compartilhamento dos arquivos. Para o compartilhamento, temos duas opções: modo exclusivo (fica preso com você durante a edição) ou modo compartilhado (é recomendado porque todos podem alterar qualquer arquivo). Por padrão, no template de processo ágil, chamado de Visual Studio Scrum, o modelo de trabalho é múltiplo check-out, permitindo uma maior colaboração e fazendo com que você não fique parado enquanto uma outra pessoa está com algum arquivo preso.

Para configurar o modelo de compartilhamento dos arquivos vá em Team Explorer > Settings > Team Project > Source Control conforme a Figura 01:

Figura 01 – Configurando Multiple Check-out

Mas a grande novidade da vez no Team Foundation Server 2012 é a funcionalidade Asynchronous Checkout, que amplia o conceito “local workspace”, realizando um checkout em segundo plano, proporcionando para nós, desenvolvedores, uma melhor experiência, sem “travar” o Visual Studio enquanto ele se comunica com os serviços do Team Foundation Server 2012.  

O ‘local workspace’ é o primeiro passo para termos suporte para uma tendência, que é o conceito de DCVS (Distributed Concurrent Versions System). Na prática, você agora pode trabalhar tranquilamente em modo off-line (descontado do TFS), realizando suas alterações com todos os arquivos liberados. Quando voltar a se conectar, ele fará o sincronismo dos arquivos. Trabalhar desconectado se tornou muito fácil com o Team Foundation Server 2012.

Para ativar o Asynchronous Checkout vá no Team Explorer > Team Project Collection > Source Control > Workspace Settings conforme a Figura 02.

Figura 02 – Worspace Settings

Como você pode observar no caminho utilizado durante a configuração do Asynchronous Checkout, fizemos diretamente no Team Project Collection essa alteração, afetando qualquer Team Project criado nessa estrutura. 

Agora, para praticar, faremos uma pequena simulação. Conforme demonstrado na Figura 03, o arquivo HomeController.cs está disponível, ou seja, ninguém o está manipulando nesse momento.

Figura 03 – Arquivo disponível

O próximo passo é interromper a conexão com Team Foundation Server 2012, desligando o seu cabo de rede ou qualquer outro recurso. Assim o Visual Studio pode detectar que o TFS não está mais disponível, conforme mostra a Figura 04.

Figura 04 – Team Explorer off-line do TFS

Com o Team Foundation Server off-line, continue trabalhando normalmente no Visual Studio. Então, pelo Solution Explorer, abra o arquivo HomeController.cs e inicie a edição mesmo. Você ai perceber que naturalmente ele, mesmo descontado, está disponível para edição.

Figura 05 – Editando um código

E se você retornar ao Solution Explorer, conforme a Figura 06, verá que o arquivo está marcado em modo de edição. Na prática, o Visual Studio está gerenciando essas alterações que você está realizando em modo desconectado do serviço do Team Foundation Server.

Figura  06 –  Arquivo em edição

E para conferir os itens pendentes vá ao Team Explorer > Pending Changes, conforme a Figura 07, e verá o referido arquivo na lista de pendência local. Fantástico!!!

Figura 07  – Arquivo editado na lista de pendência.

Como você observou, ao se conectar novamente no Team Foundation Server, basta fazer o Check-In e sincronizar as alterações com o servidor. Para tornar essas alterações mais divertidas, enquanto estávamos off-line eu aproveitei para me conectar ao Team Foundation Server de outro computador e fazer uma modificação nesse mesmo arquivo. Com isso, ao tentar sincronizar, ele vai identificar um possível conflito. A ferramenta tenta resolver sozinha e quando não consegue alerta você, conforme pode observar na Figura 08, caindo na rotina padrão de gestão de merge no TFS.

Figura 08 – Resolve conflicts

Você pode escolher a sua alteração, escolher a versão do servidor ou entrar na ferramenta de Merge, conforme a Figura 09, e fazer manualmente os ajustes. Depois de resolvido, é só efetuar um novo Check-in.

Figura 09 – Ferramenta de merge

O Team Foundation Server 2012 ganhou mais agilidade no gerenciamento de código mesmo estando off-line, o que nos dá mais liberdade para fazer as alterações e, depois, quando possível, realizar o sincronismo integrando o seu código com a sua versão principal no servidor. 

Outro ponto importante em destaque e que vai fazer a diferença é justamente o suporte ao modo assíncrono, permitindo uma maior agilidade nas operações com o controle de versão, deixando o Visual Studio 2012 liberado para você continuar trabalhando. E, de brinde, outra novidade é que agora o Visual Studio detecta alterações externas nos arquivos e inclui automaticamente essas alterações na sua lista de pendência.