De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Gerenciando patches com quilt

Colaboração: Breno Leitao

Data de Publicação: 05 de fevereiro de 2008

Para quem não conhece, o quilt é um gerenciador de patches muito útil que apareceu dos scripts pessoais do Andrew Morton que ele publicava na LKML. O quilt tem se mostrado muito útil para quem trabalha com vários patches, e frequentemente precisa fazer malabarismo com eles.

O conceito básico por traz do quilt é que ele não é um gerenciador de configuração, mas um gerenciador de patches que tem a função de trabalhar em paralelo com o gerenciador de configuração. Com o quilt você tem uma pilha de patches, e trabalha com eles como se estivesse integrando e revertendo eles, mas localmente, não tendo nenhuma relação com o gerenciador de configuração. Uma vez que algum de seus patches ficam maduros para ser integrado, então você simplesmente retira ele da lista do quilt deixando ele na responsabilidade do gerenciador de configuração.

Uma forma muito útil de usar o quilt, e que eu particularmente utilizo muito, é na depuração de aplicativos complexos, como o kernel do Linux, por exemplo. Nessas aplicações é possível criar vários patches que adicionam um printk(), muda um lock, altera um registrador, etc. E quando o desenvolvedor chegar na alteração final, simplesmente reverte todos os outros patches inúteis e manda para o gerenciador de configuração somente o patch efetivo. Note que também é bem útil para você testar combinações de patches, por exemplo, com o quilt fica muito fácil testar patches combinados, como por exemplo, testar um patch que altera um spinlock, com aquele patch que adiciona printk() em todas as entradas e saidas de funções. Abaixo segue um explicação resumida de como utilizar o quilt.

A utilização do quilt é muito simples, e para instalá-lo no sistema operacional Ubuntu simplesmente digite:

sudo apt-get install quilt 

Para utilizar o quilt, você sempre seguirá o seguinte padrão de comando:

# quilt < comando>  

Para criar um patch digite, quilt new < nome do patch>, e após isso já pode trabalhar no seu patch. O comando quilt series, mostra todos os patches que você tem, por exexemplo:

breno@cafe:~/Devel/linux/linux-2.6$ quilt new patch1 
Patch patch1 is now on top
breno@cafe:~/Devel/linux/linux-2.6$ quilt series 
patch1 
leitao 
printks 

Uma vez que você cria o patch, você precisa especificar os arquivos que vão integrar aquele patch, ou seja, os arquivos que você irá modificar e quer vê-los incluidos no patch. Para ver o seu patch no formato do diff universal, basta digitar quilt diff. Segue um exemplo:

breno@cafe:~/Devel/linux/linux-2.6$ quilt add drivers/net/e1000/e1000_main.c  
File drivers/net/e1000/e1000_main.c added to patch patch1 
breno@cafe:~/Devel/linux/linux-2.6$ vim drivers/net/e1000/e1000_main.c 
breno@cafe:~/Devel/linux/linux-2.6$ quilt diff 
Index: linux-2.6/drivers/net/e1000/e1000_main.c 
=================================================================== 
—- linux-2.6.orig/drivers/net/e1000/e1000_main.c       2008-02-01 10:15:19.000000000 -0200 
+++ linux-2.6/drivers/net/e1000/e1000_main.c    2008-02-01 10:15:50.000000000 -0200 

-5305,6 +5305,7
struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev->priv; + printk("Resuming...\n"); e1000_init_manageability(adapter); if (netif_running(netdev)) {

Para remover esse patch, basta digitar quilt pop, e para adicionar novamente quilt push. Por exemplo:

breno@cafe:~/Devel/linux/linux-2.6$ quilt pop  
Removing patch patch1 
Restoring drivers/net/e1000/e1000_main.c 

Porém note que ainda o patch está lá, e para readicionar basta digitar, quilt push patch1:

breno@cafe:~/Devel/linux/linux-2.6$ quilt push patch1 
Applying patch patch1 
patching file drivers/net/e1000/e1000_main.c 
Now at patch patch1
breno@cafe:~/Devel/linux/linux-2.6$ quilt applied 
patch1

Essa é uma pequena introdução a essa excelente ferramenta que ajuda em muito a maioria de nós, desenvolvedores que ficam loucos com tantos patches. :-)

Breno Leitão, formado pela Universidade de São Paulo em Ciência de Computação, mestre pela Universidade de Campinas, é Production Engineer no Facebook, Inglaterra.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Breno Leitao