Manuals

A bloquear

Geralmente o Subversion funciona melhor sem bloqueios usando os métodos Copiar-Modificar-Integrar descritos anteriormente em “A solução Copiar-Modificar-Integrar”. No entanto existem algumas circunstâncias em que poderás necessitar de implementar alguma tipo de política de bloqueio.

Em primeiro lugar necessitas de garantir que o servidor Subversion está actualizado para, pelo menos, a versão 1.2. Versões anteriores não suportam de todo bloqueios. Se está a usar um acesso file://, então está claro que só o teu cliente necessita de ser actualizado.

Os três significados de Bloquear

Nesta secção, e em particamente em qulaquer parte deste livro, as palavras bloqueio e bloquear descreverm um mecanismo de mutua exclusão entre utilizadores para evitar colisões ao submeter. Infelizmente, existem outros tipos de bloqueios com que o Subversion, e por consequência este livro, deve ter em conta.

The second is working copy locks, used internally by Subversion to prevent clashes between multiple Subversion clients operating on the same working copy. Usually you get these locks whenever a command like update/commit/... is interrupted due to an error. These locks can be removed by running the cleanup command on the working copy, as described in “Limpar”.

E por terceiro, ficheiros e pastas podem ficar bloqueadas se estiverem a ser usadas por outro processo, por exemplo, se tiveres um documento word aberto no Word, esse ficheiro está bloqueado e não pode ser acedido pelo TortoiseSVN.

Por norma podes descartar esses outros tipos de bloqueios, até acontecer algo errado que requeira o teu apoio

Como Funciona o Sistema de Bloqueio no Subversion

Por defeito nada é bloqueado, e qualquer um que tenha acesso para submeter, pode submeter alterações em qualquer ficheiro a qualquer altura. Outros irão actualizar a sua cópia de trabalho periodicamente e as alterações no repositório serão integradas com as alterações locais.

Se tu Obteres o bloqueio num ficheiro, então só podes submeter esse ficheiro. Submissões de outros utilizadores serão bloqueados até libertares o bloqueio. Um ficheiro bloqueado não pode ser modificado de forma alguma no repositório, pelo que não poderá ser apagado ou também renomeado, à excepção do autor do bloqueio.

Importante

O bloqueio não é atribuído apenas a um utilizador específico, mas a um utilizador específico e a uma cópia de trabalho. Tendo um bloqueio na cópia de trabalho previne também que o mesmo utilizador submeta um ficheiro bloqueado a partir de uma outra cópia de trabalho.

Como exemplo, imagina que o utilizador Jon tem uma cópia de trabalho no seu PC de escritório. Aí ele começa a trabalhar numa imagem, e para tal adquire um bloqueio para esse ficheiro. Quando abandona o escritório ele ainda não finalizou o trabalho nesse ficheiro, pelo que não libertou esse bloqueio. De volta a casa, o Jon também tem uma cópia de trabalho, e decide trabalhar mais um pouco no projecto. Mas ele não pode modificar ou submeter o mesmo ficheiro de imagem, porque o bloqueio para esse ficheiro reside na sua cópia de trabalho do escritório.

No entanto outros utilizadores não terão necessariamente conhecimento de que tu obtiveste um bloqueio. A não ser que verifiquem o estado de bloqueio regularmente, a primeira vez que terão conhecimento será quando ao submeterem a operação falhar, o que na maior parte dos caso não será muito útil. Para tornar mais fácil a gestão de bloqueios, existe uma propriedade nova no Subversion svn:needs-lock. Quando esta propriedade está configurada num ficheiro (para qualquer valor), quando o ficheiro é SVN exportado ou actualizado a cópia local é colocada em estado de só de leitura, a não ser que essa cópia tenha o bloqueio desse ficheiro. Isto actua como um aviso que não deverás alterar esse ficheiro a não ser que primeiro obtenhas o seu bloqueio. Os ficheiros que são, versionados e só de leitura, são marcados com uma sobreposição especial do TortoiseSVN, que indica que necessitas de obter um bloqueio antes de editares.

Os bloqueios são registados por localização da cópia de trabalho tal como por autor. Se tiveres várias cópias de trabalho (em casa, no trabalho) então só poderás obter um bloqueio numa dessas cópias de trabalho.

Se um dos teus colegas adquire um bloqueio e vai de férias sem o libertar, o que farás? O Subversion providência um meio de forçar bloqueios. Libertar um bloqueio detido por outro é referido como Quebrar o bloqueio, e forçar aquisição de um bloqueio detido por outrém é referido como Roubar o bloqueio. Naturalmente essas são acções que não deverás efectuar de ânimo leve, se queres manter a amizade com os teus colegas de trabalho.

Os bloqueios são registados no repositório e um testemunho de bloqueio é criado na tua cópia de trabalho. Se existe uma discrepância, por exemplo se alguém quebrou o bloqueio, o testemunho local do bloqueio fica inválido. O repositório é sempre a referência definitiva.

Obter um Bloquieo

Selecciona o ficheiro(s) na tua cópia de trabalho, para o qual queres adquirir um bloqueio, e então selecciona o comando TortoiseSVNObter Bloqueio....

Figura 4.58. A Caixa de Diálogo Bloquear

A Caixa de Diálogo Bloquear


Uma caixa de diálogo aparece para permitir introduzir um comentário, para que os outros possam ver porquê bloqueaste o ficheiro. O comentário é opcional só é usado correntemente com repositórios baseados em Svnserve. Se (e se) necessitas de roubar o bloqueio de alguém, verifica a caixa Roubar bloqueio, e clica no OK.

Poderás configurar a propriedade de projecto tsvn:logtemplatelock para fornecer aos utilizadores uma mensagem de modelo (template), para que a preencham como mensagem de bloqueio. Consultar a secção “Configurações de Projecto” para instruções em como configurar propriedades.

Se seleccionas um ficheiro e então usas TortoiseSVNObter bloqueio..., a caixa de diálogo bloquear irá abrir com todos os ficheiros em todas as subpastas seleccionadas para bloquear. Se realmente queres bloquear uma hierarquia inteira, esta é a maneira de o fazer, mas podes-te tornar muito impopular junto dos teus colegas de trabalho se bloqueias todo o projecto. Usa com moderação...

Libertar um Bloqueio

Para ter a certeza que não te esqueces de libertar um bloqueio que não precisas mais, os ficheiros bloqueados são mostrados na caixa de diálogo submeter e seleccionados por defeito. Se continuares com a submissão, os bloqueios são removidos nos ficheiros seleccionados, mesmos se os ficheiros não foram modificados. Se não queres libertar o bloqueio em certos ficheiros, podes desseleccioná-las (se não foram modificadas). Se queres manter um bloqueio num ficheiro que modificaste, tens de activar a caixa de verificação Manter bloqueios, antes de submeteres as tuas alterações.

Para libertar manualmente um bloqueio, selecciona o(s) ficheiro(s) na tua cópia de trabalho, para os quais queres libertar os bloqueios e selecciona o comando TortoiseSVNLibertar bloqueio Não há mais nada a introduzir pelo que o TortoiseSVN irá contactar o repositório e libertar os bloqueios. Podes também usar este comando numa pasta, para libertar recursivamente, todos os bloqueios.

Verificar o Estado dos Bloqueio

Figura 4.59. A Caixa de Diálogo Verificar Alterações

A Caixa de Diálogo Verificar Alterações


Para ver os bloqueios que tu e os outros têm, podes usar TortoiseSVNVerificar alterações.... Testemunhos de bloqueios locais aparecerão imediatamente. Para verificar os bloqueios detidos por outros (e para ver se algum dos teus bloqueios estão quebrados ou roubados) necessitas de clicar em Verificar Repositório.

A partir daqui, do menu de contexto, podes também obter e libertar bloqueios tal como quebrar ou roubar bloqueios detidos por outros.

Evitar Quebrar e Roubar Bloqueios

Se quebrares ou roubares um bloqueio de outro sem lhe dizeres nada, podes potencialmente provocar perda de trabalho. Se estás a trabalhar com tipos de ficheiros não integráveis e roubas o bloqueio de outro, quando libertares o bloqueio, eles ficaram livres para submeter as suas alterações e reescrevendo as tuas. O Subversion não perde dados, mas tu perdeste a protecção de trabalho-em-equipa que o bloqueio te deu.

Tornar os Ficheiros Não-Bloqueados Só de Leitura

Como mencionado acima, a maneira mais eficaz de usar os bloqueios é configurar a propriedade svn:needs-lock em ficheiros. Consultar “Configurações de Projecto” para instruções em como configurar propriedades. Ficheiros com esta propriedade configurada serão sempre SVN exportadas e actualizadas com a bandeira só-de-leitura levantada, a não ser que a tua cópia de trabalho tenha um bloqueio.

Como lembrete o TortoiseSVN usa uma sobreposição especial para indicar isto.

Se aplicas uma política em que todo o ficheiro tem de ser bloqueado, então acharás mais fácil usar a funcionalidade auto-props do Subversion para fixar automáticamente a propriedade, de cada vez que adicionas novos ficheiros. Consulta “Configuração automática de propriedades” para mais informações.

Os Scripts do Gancho de Bloqueio

Quando crias um repositório novo com o Subversion 1.2 ou superior, são criados quatro templates de gancho na pasta hooks do repositório. Esses são invocados antes e depois de obter um bloqueio, e antes e depois de libertar um bloqueio.

Será uma boa ideia instalar no servidor um script de gancho post-lock e post-unlock, que envia um email indicando que ficheiro foi bloqueado. Com tal script instalado todos os teus utilizadores podem ser notificados se alguém bloqueia/desbloqueia um ficheiro. Podes encontrar um exemplo de um script de gancho hooks/post-lock.tmpl na pasta do teu repositório.

Podes também utilizar ganchos para proibir quebrar ou roubar bloqueios, ou talvez limitá-lo a um administrador nomeado. Ou talvez quererás enviar um email ao dono, quando um dos seus bloqueios é quebrado ou roubado.

Consulta “Scripts de gancho de servidor” para saberes mais.

TortoiseSVN homepage