Este é um vídeo rápido e porco sobre a criação de patches pro Drupal. É rápido no sentido em que eu não vou entrar muito em detalhes e porco no sentido de que você vai ter um monte de lixo na minha tela, já que eu fiz esse vídeo meio que ao vivo e então é melhor você ignorar que isso e me acompanhar. Nós vamos usar aqui duas feramentas para criar patches: o diff e o CVS diff. O diff você pode usar se não tiver acesso ao CVS ou então se estiver com um pouco de medo de CVS. O diff é um jeito de criar patches sem depender de uma outra ferramenta. Já com o CVS diff, naturalmente, você vai rodar contra o CVS; é um jeito muito legal e rápido de fazer um patch. Para começar, a gente vai nos handbooks e aqui na seção "Contributing to Development" (Contribuindo com o Desenvolvimento). Em seguida, a gente vai na sessão "Patches". Agora, em "Patches", você vai ver um "HOWTO: Create patches" (Criar patches), além de um "HOWTO: Submiting patches for Drupal" (Enviando patches para o Drupal). Você deve ler e se familiarizar com os dois. 0:57 Nós vamos começar com o "HOWTO: Create Patches", que cobre o básico sobre o diff. Aqui no meio é o comando que a gente vai usar com o diff, o que não precisa do CVS. Agora eu preciso puxar meus arquivos para ter certeza que eu tenho os mais recentes. É só ir para página do projeto - bem aqui - que por sinal eu já sei qual é. Assim que eu chegar aqui, eu vou direto para os tarballs. Estes aqui são os releases oficiais, mas eu vou usar a versão de desenvolvimento para ter certeza de ter o mais recente. Além do que, eles podem atualizar a versão anterior, também, se quiserem. Agora, deixa eu abrir o arquivo... Então, vejamos: ah, aqui está, na minha área de trabalho. E aqui está o arquivo README que é o arquivo que eu quero de fato editar. Eu vou abrir ele agora com meu editor de texto. 2:00 A primeira coisa que vou fazer é salvar ele como um novo arquivo, para que o diff possa comprar os dois arquivos e obter a diferença. Então, vou salvar com a palavra "new" (novo) no nome. Eu preciso ter certeza que eu estou salvando no lugar certo. Quando estou fazendo diffs, eu sempre salvo o novo arquivo em que eu estou trabalhando no mesmo lugar do original. Se você fizer um diff de dois arquivos em lugares muito diferentes é provável que você acabe com um patch que as pessoas não conseguem aplicar. Agora eu tenho meu novo arquivo, então vou mudar o que eu quero nele. Seria o mesmo se fosse código ao invés de um README. Qualquer mudança que você fizer, faça. A gente vai descobrir as diferenças quando executar o comando. 3:00 Eu só preciso digitar, e digitar, e é isso. Agora eu salvo esse arquivo e eu volto para aquela página do diff que a gente estava. Vamos rever nosso comando. Enquanto ela carrega, eu posso já abrir meu terminal, já que estamos usando linha de comando aqui. Eu vou usar "cd" para abrir a pasta onde os arquivos estão, que nesse caso é minha área de trabalho. Agora eu dou um "ls", para listar os arquivos. Você pode ver que o novo arquivo já está na pasta. 4:04 Aqui de volta na página, vejamos: este é o comando que a gente quer. É praticamente isso o que vou ter que digitar. Pois bem, é diff, traço, "up", o nome do arquivo antigo (que é só "README"), e em seguida o nome do arquivo novo. [diff -up README READMEnew] Eu também quero colocar o resultado num arquivo de patch. Eu vou por no arquivo de patch um nome que meio que faça sentido e que todo mundo possa entender do que se trata. Você pode salvar o patch onde quiser, basta digitar o caminho. Então quando eu listar o conteúdo do diretório, eu vejo que o meu novo patch está aqui. 5:00 Isso foi como usar o diff padrão, sem o CVS, na máquina local. Vamos então abrir para ver como ficou. O que está vermelho foi removido, o que está em verde, adicionado. No topo você tem o nome dos arquivos, o que não é tão importante assim. Agora vamos continuar e fazer um CVS diff. A primeira coisa que eu preciso fazer vai ser... Eu já tenho um checkout, um checkout CVS, desse módulo. Eu preciso então ir aonde esse checkout está e atualizar, para ter certeza que eu tenho os arquivos mais novos. Então, "update dp". Obter últimos arquivos... sim. Pronto, eu tenho tudo atualizado então agora eu posso começar a trabalhar com o módulo. Continuando, vou abrir o arquivo README. 6:00 Como você pode ver, eu tenho um checkout de todos os módulos aqui, mas eu quero só o imagecache. Vá lá. Aí está o README, então vamos abrir. Agora eu preciso colocar minhas mudanças. Eu não tenho que criar um novo arquivo nem fazer nada como eu fiz com o diff normal, porque o que o CVS diff vai fazer é comparar meu arquivo local com o que está no CVS do drupal.org. Para achar as diferenças, ele vai ir até o drupal.org e ver a versão mais nova. Eu só vou digitar meu lixo aqui e você pode brincar também em casa. Geralmente os mantenedores preferem os CVS diffs porque quando você usa eles, eles conseguem saber qual é mesmo a revisão do arquivo, o que é uma informação bem útil. 7:09 Ah, você pode ver que tem muitas linhas aqui. Tem muito espaço em branco nesse arquivo. Normalmente eu apagaria isso, mas com um patch é melhor você não editar nada além do que você quer mesmo mudar. O diff, a gente já fez. Agora o que a gente quer é o CVS diff. Vou até "Submit patches to Drupal" (Enviando patches para o Drupal) porque é lá que tem informação sobre o CVS diff. Vou, assim que a internet deixar... pronto. De novo, você precisa ler a página inteira, que nela tem coisa boa. Esse daqui é comando que a gente vai usar. Voltando para o terminal, nós já estamos no diretório, então é só digitar o comando. 7:57 Eu quero rodar cvs diff "up" e só preciso colocar o nome do arquivo. Não tem nenhum arquivo novo. De novo, o resultado do patch eu quero salvar aqui, local, nessa pasta, para eu pode ver ele eu mesma. Assim que eu rodar isso, vou listar meus arquivos e taí meu patch. Foi fácil. Vamos dar uma olhada nele e a gente pode ver que ele ficou um pouco diferente. Você pode perceber que o topo parece um pouco diferente. Tem essa linha aqui que na verdade indica a versão exata do arquivo contra o qual eu fiz o diff. Um desenvolvedor quer ver esse patch vai saber com certeza contra que versão ele foi feito. Então, a gente fecha tudo e agora eu preciso enviar meu patch. É isso aí: o patch está completo agora e eu só preciso enviar. Eu vou em issues, e aqui eu posso enviar uma nova issue. 8:57 Aqui eu precisaria escolher um projeto. Se for o Drupal, você escolhe Drupal, mas como isso aqui é para um certo módulo contribuído, eu escolho imagecache. Preciso preencher algumas informações aqui. A versão é 5.1 dev, porque foi com ela que eu fiz o patch. Essa é uma mudança na documentação e essa é uma feature request (pedido por uma nova funcionalidade). Preencha depois o resto do formulário. Não vou fazer isso agora porque eu já tenho uma issue sobre isso. Eu criei a issue antes para eu não esquecer de fazer o patch. Vou abrir aquela issue que já existe. (e deixa eu me livrar destes malditos emails...) Aqui está, e para anexar o patch, eu vou enviar um "follow up" à issue. Eu preciso aliás mudar isso para dev, porque a issue original eu fiz sobre a versão 1.2. 1.2 é a versão original que eu estava usando, mas o patch foi feito mesmo com a versão de desenvolvimento. 10:05 Eu só vou por uma pequena descrição aqui para que as pessoas saibam o que estou anexando. Também preciso explicar que mudei da versão 1.2 para dev porque estou fazendo o patch com o branch CVS 5 e não com o release atual. Uma vez que feito tudo isso, eu preciso, finalmente, anexar o patch. Não vai ajudar muito se você não enviar ele de fato, claro. Então, a gente volta para cá e acha o patch que está que está na minha pasta CVS, onde criei ele. 11:02 Aqui está o patch. Nós vamos por ele lá. Você pode prever sempre que você enviar, mas se você tem um anexo, não funciona muito bem... Vou enviar de uma vez. Eu não tenho nenhum texto doido nem nada que precise checar a formatação. Está enviando... E pronto, lá está ele. Se você clicar lá você vê que é a mesma coisa que eu tinha em meu servidor local. Ah, uma coisa que eu percebi agora, depois que eu fiz isso tudo, é que eu esqueci de mudar o status de active (ativo) para patch (code needs review - código precisa de revisão). É isso: eu não vou mais te encher mais com detalhes e depois eu volto para mudar aquilo. Pois bem, isso que é fazer um patch no Drupal.