Ir para o conteúdo

 Voltar a i-Educar De...
Tela cheia

Sobre contribuições via patches

21 de Fevereiro de 2010, 14:50 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 7 vezes

Estou usando um patch recente contribuído pelo Rafael para esclarecer um pouco como contribuir com patches. Essa thread vai se transformar em algum guia na documentação de desenvolvimento no wiki.

Como todos sabem, grande parte do código do i-Educar não se encontra sobre padrões de codificação concisos. A identação feita hora por <tab> hora por espaço é prova clara disso.

Qual é o problema nisso?

Qualquer software em que mais de uma pessoa trabalha deve ter padrões de codificação claros, para que todos contribuam com código seguindo a mesma forma. Isso é importante já que a forma do código é um item importante para o entendimento de um trecho por outros programadores.

Outro item importante nisso é para o uso de ferramentas de desenvolvimento, como o diff. Quando temos um software com versionamento de código-fonte, podemos visualizar através de seu histórico todas as alterações feitas. Quando não aplicamos padrões de codificação, visualizar essas mudanças fica mais difícil. Exemplos:

  • O diff do Trac. Quando substituímos um <tab> de identação pelo equivalente em espaços, o diff do Trac mostra uma identação menor.
  • IDEs com configuração para apagar espaços adicionais nos finais de linhas. Ao fazer isso, quando usamos o diff, acabamos por visualizar diversas linhas em que apenas um espaço adicional foi apagado.

Claro que é fácil solicitar ao diff que não mostre mudanças de espaços (basta usar diff -Nur ao invés de -Naur) mas isso tem a capacidade de dar mais confusão do que solução.

Qual é a aproximação correta em um software legado, então? Não existe. O que podemos fazer são pequenas adequações para só então corrigirmos um bug ou implementarmos uma melhoria no código.

No i-Educar, para preservar o histórico de mudanças no código, tenho recorrido a alguns passos metódicos:

  1. Minha IDE está sempre configurada para apagar espaços em brancos no final da linha. Seja quando uso o Eclipse, TextMate ou Vim
  2. Sempre, sempre passo o código para os padrões de codificação do i-Educar antes de modificá-lo. É por isso que tem tantos commits no repositório com a frase "Refactoring para coding standards". Dessa forma, o commit com a correção do código posterior irá ficar muito mais simples de entender. Outro benefício é o de padronizar o código. Matamos 2 coelhos numa cajadada só.
  3. Somente então faço a correção do código. Dois commits de exemplo são: 598 e 599.

O passo 2 é muito monótono quando estamos trabalhando em um código legado mas é um mal necessário. Dessa forma, aos poucos, damos padrão ao código. A ideia é ir padronizando enquanto corrigimos e implementamos melhorias. Café (forte, com pouco açúcar) e rock (pop, indie, britânico, hard, metal, nü... não importa, que seja rock) são recomendados enquanto se faz isso.

Como não iremos dar permissão de escrita no repositório a torto e a direito, a contribuição tem que ser via patch. No wiki temos o exemplo através de svn diff, mas esse método fica um pouco difícil quando você executa o passo 2 e depois o 3. Como dica, recomendo usar o git (através do git svn), que permite criar um repositório local, com branches locais. Assim você faz as suas correções em um branch local e depois sincronizar o seu repositório com as alterações do repositório oficial.

Por fim, ao contribuir o patch via Trac, não marque o ticket como encerrado. Só será encerrado quando este for aplicado, testado e commitado (êta neologismo). Encerrar o ticket antes da hora pode resultar em eu não o vê-lo e ficar esquecido até 2012. :) 

Observação: use, por enquanto, o branch RegrasAvaliacao para criar os patches. Um problema de infra do portal não está possibilitando fazer o merge desse branch em trunk/. Quando o problema for solucionado, passaremos a usar trunk/ como árvore de desenvolvimento novamente. 

Autor: Eriksen Costa


55 comentários

  • 2ddbfcc641df3f170ff197d488eeebec?only path=false&size=50&d=404Rodolfo Bottossi(usuário não autenticado)
    22 de Fevereiro de 2010, 13:17

     

    Muito obrigado pelos esclarecimentos.No entanto, quanto a questão de passar todo o código para o padrão de codificação em cada arquivo modificado eu me orientei pelas próprias instruções escritas lá:"Dica: refatore apenas o código que esteja diretamente relacionado com o a correção/funcionalidade em que esteja trabalhando. Assim, evita-se a introdução de novos bugs por falta de atenção."Sou mais a favor desta dica para evitar a introdução de novos bugs, mas se a recomendação é refactorar, então vamos refactorar! :) Passarei a utilizar conforme informado o branch RegrasAvaliacao para criar os patches, farei o refactoring nos arquivos modificados e indicarei o caminho completo da árvore corretamente nos patchs (.diff).Muito obrigado!Saudações,Rodolfo Bottossi 

    • 503e17102f7c813397aa672a32756b54?only path=false&size=50&d=404Eriksen Costa(usuário não autenticado)
      23 de Fevereiro de 2010, 12:43

       

      Sim, essa é a recomendação que está no Trac mas eu já vinha solicitando esses passos informalmente para todos que me mandaram e-mail. Só não houve tempo para atualizar a página, por isso aproveitei a deixa.

      Para exemplificar ainda mais, fiz o refactoring e a correção e disponibilizei no subversion. Veja nos changesets 610 e 611 como o diff fica mais limpo. Aproveitei e identifiquei que existiam atributos de instância não utilizados no código e os removi.

      • 2ddbfcc641df3f170ff197d488eeebec?only path=false&size=50&d=404Rodolfo Bottossi(usuário não autenticado)
        23 de Fevereiro de 2010, 13:22

         

        Perfeito! Agora ficou muito mais claro!Mais uma dúvida, no mesmo ticket usado como exemplo, acredito (não é certeza) que ainda falte uma correção, qual seria o procedimento correto então? Reabrir o ticket e anexar outro patch? Reabrir o ticket e comentar a necessidade da implementação? Manter o ticket closed e comentar a necessidade de implementação? A correção seria a adição do nome da Instituição no título, visível na linha 51 do arquivo.

Mapeamento do i-Educar por todo o Brasil

23 de Abril de 2018, 16:31, por Tiago Giusti

A Portabilis, organização que é integrante da comunidade desde 2009 e que atua no papel de mantenedora do projeto, propôs uma renovação de energias, ao final de 2017, para levar o i-Educar ainda mais longe.



Situação atual do lançamento do maior software livre de gestão escolar do Brasil

10 de Abril de 2018, 11:29, por Tiago Giusti

O Coordenador da Comunidade i-Educar e CEO da Portabilis, Tiago Giusti, foi a Brasília, no fim do ano passado, representando a Comunidade i-Educar numa visita ao Ministério do Planejamento para discutir soluções para alguns assuntos de interesse da Comunidade, tais como:



Em 2018, queremos o i-Educar por todo o Brasil

28 de Dezembro de 2017, 23:08, por Tiago Giusti

Esta mensagem é diferente das de retrospectiva dos anos anteriores. Vamos abordar primeiro sobre o futuro, encerrando com um resumo de como foi 2017.



Prefeitura de Criciúma implanta o i-Educar na rede municipal de ensino

20 de Dezembro de 2017, 11:04, por Tiago Giusti

Buscando melhorar o sistema de informações da rede municipal de ensino de Criciúma, a Administração Municipal, através da Secretaria de Educação e da Diretoria de Tecnologia da Informação (TI), implantará um software de gestão de dados nas unidades educacionais. Denominado i-Educar, o sistema aperfeiçoará o armazenamento de dados e auxiliará gestores e professores de Criciúma.



Retrospectiva i-Educar 2016: o que conseguimos realizar?

31 de Dezembro de 2016, 12:00, por Tiago Giusti

Chegamos a mais um 31/12 e é hora de fazermos a retrospectiva da Comunidade i-Educar, como temos feito todos os finais de ano.