Bug no Team Foundation Version Control

Aconteceu com um de nossos desenvolvedores aqui na FórumAccess: ao trabalhar com datasets tipados, o designer de datasets passou a “explodir” com uma mensagem de ACCESS_DENIED. Minha primeira providência foi checar as permissões no TFS – estava tudo OK. Depois, fui checar as permissões da cópia local no workspace dele. Qual não foi minha surpresa quando, ao abrir o diretório, vi que os arquivos .cs dos datasets dele tinham virado diretórios!!!

Provavelmente isso se deve a um erro conhecido do Team Foundation Server, disponível na página de FAQ do projeto de Web Applications para Visual Studio 2005:

Issue 7 – Using TFS Source ControlThere is a known issue with the enterprise source control system in the Team Foundation Server (TFS) which incorrectly identifies codebehind classes for .aspx. and .ascx files as folders.

To workaround, do not use “File/Source Control/Open from Source Control”. Instead, manually get the solution using Team Explorer and open the solution from local disk.

This problem will be fixed in a future release of Team Foundation Server.

Ou seja, além de páginas e controles ASP.NET, datasets tipados também estão sujeitos ao bug.

1

Alguém mexeu no meu check-out

Temos tido algumas experiências não muito divertidas com o controle de versão do TFS aqui na FórumAccess. Elas se devem basicamente ao fato de que antes usávamos o Visual SourceSafe (VSS).

Não, não é um problema de migração. Aliás, se você tem um repositório no SourceSafe e pretende migrar para o TFS, fique tranqüilo: a conversão é possível e você mantém todo o histórico do VSS.

Na verdade, a diferença é cultural. O problema deve-se ao fato que check-out no VSS e no TFS não significam a mesma coisa!

  • No VSS, podemos dizer que check-out significa “baixe a última versão disponível do arquivo, coloque uma trava no servidor para evitar outros check-outs desse arquivo e altere-o de somente-leitura para leitura-gravação no meu computador”. Ufa! Quanta coisa num comando só!
  • Já no TFS, check-out significa simplesmente “avise aos outros que estou editando este arquivo”. Viu que diferença?

O ponto de maior destaque aqui é que o TFS não faz um “Get Latest Version” no momento do check-out, em oposição ao modelo do VSS.

Por conta disso tivemos algumas discussões acaloradas aqui na empresa. Alguns desenvolvedores chegaram a chamar a ferramenta de “burra”:

“Oras”, disseram, “se estou fazendo check-out é porque quero editar o arquivo. Se quero editar o arquivo, é claro que quero a última versão!!!”

Pode parecer óbvio assim, mas na verdade não é. Se você pensar uma segunda vez a respeito disso, vai ver que o TFS é mais inteligente do que alguns imaginam… 😉

Acompanhe meu raciocínio. Quando você baixa uma versão de um projeto do controle de versão, está na verdade pegando um conjunto de artefatos interligados e interdependentes. Todos os arquivos devem estar no mesmo estágio de desenvolvimento para que seja possível compilar sua solução. Assim, se você baixa um projeto inteiro e depois de dois dias faz check-out para alterar um dado arquivo, pode ser que esse mesmo arquivo tenha sido modificado por alguém nesse intervalo de dias. Se a ferramenta fizer um Get Latest Version, você irá receber um arquivo que não está no mesmo estágio de desenvolvimento que o restante na sua máquina. As alterações incluídas pelo outro desenvolvedor podem quebrar seu build. Por isso, faz sentido integrar suas alterações com as demais feitas pelo resto da equipe apenas quando elas estiverem prontas. Enquanto isso, você tem uma versão estável do código-fonte, mesmo que os outros estejam fazendo check-in de seus trabalhos.

1