{"id":20,"date":"2008-08-20T15:51:19","date_gmt":"2008-08-20T13:51:19","guid":{"rendered":"http:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/sesion-de-traballo-con-svn-e-envio-de-parches"},"modified":"2008-08-20T15:51:19","modified_gmt":"2008-08-20T13:51:19","slug":"sesion-de-traballo-con-svn-e-envio-de-parches","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/2008\/08\/20\/sesion-de-traballo-con-svn-e-envio-de-parches\/","title":{"rendered":"Sesi\u00f3n de traballo con svn e env\u00edo de parches"},"content":{"rendered":"<p>Logo do \u00faltimo post onde introduciamos os <a href=\"http:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/repositorios-e-mantemento-do-codigo\">conceptos b\u00e1sicos dun sistema de control de versi\u00f3ns<\/a>, neste <strong>imos simular unha sesi\u00f3n de traballo habitual contra un proxecto de software libre<\/strong>.<\/p>\n<p>Para iso escollemos o noso obxectivo. Neste caso imos usar un c\u00f3digo que recupera perf\u00eds de usuarios e os artistas m\u00e1is escoitados da plataforma <a href=\"http:\/\/www.last.fm\/\">last fm<\/a>. O programa est\u00e1 feito na linguaxe <a href=\"http:\/\/www.perl.org\/\"><em>perl<\/em><\/a> e usa a <a href=\"http:\/\/www.last.fm\/api\/intro\">API de last fm<\/a> para facelo. A nosa tarefa ser\u00e1 documentar o que fai cada unha das funci\u00f3ns do c\u00f3digo.<\/p>\n<p>O que necesitamos nun primeiro momento \u00e9 ter instalado no noso ordenador un <em>cliente svn<\/em> para conectarnos \u00f3 servidor e descargar o c\u00f3digo. En Ubuntu o paquete a instalar ch\u00e1mase <em>subversion<\/em>.<\/p>\n<p><strong>OBTENCI\u00d3N DO C\u00d3DIGO FONTE E REALIZACI\u00d3N DE CAMBIOS <\/strong><\/p>\n<p>Unha vez o temos imos crear un directorio de traballo temporal para realizar esta sesi\u00f3n. Nunha consola (o s\u00edmbolo $ indica que son comandos de <em>shell<\/em> o que vai a continuaci\u00f3n) facemos o seguinte:<\/p>\n<blockquote><p>$ mkdir \/tmp\/lastfm_test<\/p>\n<p>$ cd \/tmp\/lastfm_test<\/p>\n<p>$ svn checkout <em>uri_svn<\/em> .<\/p>\n<p><em>uri_svn<\/em> = https:\/\/svn.forge.morfeo-project.org\/svn\/freeswmaster\/trunk\/amaneiro\/perl-workshop\/<\/p><\/blockquote>\n<p>Neste momento temos o c\u00f3digo \u00e1 nosa disposici\u00f3n e podemos empezar a traballar con \u00e9l.<\/p>\n<p>Si agora observamos as diferencias da nosa <em>copia local de traballo<\/em> (co\u00f1ecida como <em>working copy<\/em>) con respecto \u00f3 <em>repositorio<\/em> (comandos <em>svn diff<\/em>, <em>svn status<\/em>) veremos que a sa\u00edda de ambos comandos \u00e9 vac\u00eda. L\u00f3xicamente, debe ser as\u00ed, porque a\u00ednda non fixemos ningunha modificaci\u00f3n con respecto \u00f3 c\u00f3digo que nos descargamos. \u00c9 un bo momento para ver tam\u00e9n a historia do proxecto (usando o comando <em>svn log<\/em>) e xogar coas m\u00faltiples opci\u00f3ns que pos\u00fae.<\/p>\n<p>Para seguir coa sesi\u00f3n, abrimos o noso editor favorito e modificamos o ficheiro <em>ex11.pl<\/em> documentando cada unha das funci\u00f3ns.<\/p>\n<p>Unha vez rematemos, podemos <a href=\"http:\/\/svnbook.red-bean.com\/en\/1.4\/svn.tour.cycle.html#svn.tour.cycle.examine\">observar os cambios<\/a>: c\u00f3mo variou o estado da nosa <em>copia local de traballo<\/em> con respecto \u00f3 <em>repositorio<\/em>. Comprobamos os ficheiros modificados (comando <em>svn status<\/em>) e logo as modificaci\u00f3ns introducidas en cada un deles (comando <em>svn diff<\/em>).<\/p>\n<p><strong>SUBINDO OS CAMBIOS REALIZADOS<\/strong><\/p>\n<p>Agora que sabemos que os cambios que se realizar\u00e1n son os correctos, debemos asegurarnos de ter a \u00faltima versi\u00f3n do c\u00f3digo do <em>repositorio<\/em>, pois \u00e9 posible que algu\u00e9n m\u00e1is estivese traballando en paralelo e o c\u00f3digo que te\u00f1amos na nosa <em>copia local de traballo<\/em> est\u00e9 desactualizado con respecto \u00f3 <em>repositorio<\/em>. Actualizamos pois a nosa <em>copia de traballo<\/em> (comando <em>svn update<\/em>).<\/p>\n<p>Unha vez <a href=\"http:\/\/svnbook.red-bean.com\/en\/1.4\/svn.tour.cycle.html#svn.tour.cycle.resolve\">resoltos os posibles conflitos existentes<\/a>, estamos listos para enviar os cambios \u00f3 repositorio. Pode darse calquera das 2 situaci\u00f3ns seguintes:<\/p>\n<ol>\n<li>Temos unha conta propia no repositorio do proxecto: podemos enviar os cambios directamente.<\/li>\n<li>Non temos conta no repositorio do proxecto: debemos enviar os cambios a algu\u00e9n que te\u00f1a conta.<\/li>\n<\/ol>\n<p>No primeiro caso bastar\u00eda con facer:<\/p>\n<blockquote><p><em>$ svn commit<\/em><\/p><\/blockquote>\n<p>Autom\u00e1ticamente abrir\u00edase o editor de texto predeterminado do sistema e no arquivo que nos abre escribimos unha breve descripci\u00f3n dos cambios realizados (&#8220;documentaci\u00f3n das funci\u00f3ns&#8221; no noso caso). Gardamos o arquivo e cerramos o editor. Os cambios son enviados \u00f3 repositorio.<\/p>\n<p>Si estamos na segunda opci\u00f3n (non temos conta) debemos enviar un parche \u00e1s listas do proxecto para que o revise e o incl\u00faa no repositorio si o considera oportuno.<\/p>\n<p><strong>C\u00d3MO ENVIAR UN PARCHE<\/strong><\/p>\n<p>Como xa dixemos, \u00e9 posible que non te\u00f1amos acceso \u00f3 repositorio para subir os cambios. Neste caso, a estratexia a seguir consiste en realizar un informe das <strong>diferencias entre a nosa copia local de traballo e o repositorio<\/strong>. Ser\u00e1 iso o que lle enviaremos \u00e1s listas do proxecto para que vexan os cambios e os apliquen sobre o repositorio si o creen conveniente.<\/p>\n<p>Para facer isto existen as ferramentass <em>diff<\/em> (que compara arquivos li\u00f1a por li\u00f1a) e <em>patch <\/em>(que aplica un parche determinado sobre un arquivo). As\u00ed, un parche pode entenderse como un informe de cambios respecto a un (ou varios) arquivo(s). Podedes observar as funcionalidades de cada unha delas na propia p\u00e1xina do manual. Para o caso que nos ocupa, o propio cliente de <em>subversion<\/em> trae integrada a posibilidade de facer un <em>diff<\/em> da copia de traballo con respecto \u00f3 repositorio.<\/p>\n<p>O \u00fanico que temos que facer para ter un arquivo cos cambios respecto \u00f3 repositorio \u00e9:<\/p>\n<blockquote><p><em>$ svn diff &gt; parche.diff<\/em><\/p><\/blockquote>\n<p>Deste modo, no ficheiro <em>parche.diff<\/em> temos os cambios ficheiro por ficheiro. \u00c9ste arquivo ser\u00e1 o que se env\u00eda \u00e1s listas do proxecto para que comproben que o parche \u00e9 correcto, se discuta e se aplique en \u00faltimo caso.<\/p>\n<p>Cada proxecto ten as s\u00faas <em>normas sociais<\/em> \u00e1 hora de enviar parches, mais en xeral, <strong>boas pr\u00e1cticas \u00e1 hora de realizar e enviar un parche<\/strong> son:<\/p>\n<ul>\n<li>Realizar o parche sobre a \u00faltima revisi\u00f3n do proxecto.<\/li>\n<li>Enviar o parche \u00e1 lista de correo do proxecto, non directamente \u00f3 programador.<\/li>\n<\/ul>\n<p>De cara observar a complexidade do env\u00edo e posterior revisi\u00f3n do parche ata que \u00e9ste sexa aceptado ou rexeitado, son boas referencias as seguintes gu\u00edas:<\/p>\n<ul>\n<li><a href=\"http:\/\/ldn.linuxfoundation.org\/book\/5-posting-patches\">How to participate in the linux community<\/a><\/li>\n<li><a href=\"http:\/\/techbase.kde.org\/Contribute\/Send_Patches\">Contribute \/ Send patches to KDE <\/a><\/li>\n<\/ul>\n<p><strong>RESUMO<\/strong><\/p>\n<p>\u00d3 longo deste post, seguimos o seguinte <strong>fluxo de traballo<\/strong>:<\/p>\n<ol>\n<li><em>svn checkout uri_svn<\/em> # descargamos o c\u00f3digo do proxecto<\/li>\n<li>(traballamos na tarefa que nos ocupaba: documentaci\u00f3n neste caso)<\/li>\n<li><em>svn update <\/em># actualizamos os nosos cambios con outros que puideron facer os programadores<\/li>\n<ol>\n<li>(si non existen conflictos pasamos \u00f3 punto 4)<\/li>\n<li>(revisar e resolver os conflictos si existen, logo volver \u00f3 punto 3)<\/li>\n<\/ol>\n<li><em>svn status; svn diff<\/em> # comprobamos que os cambios rexistrados sexan os correctos<\/li>\n<li><em>svn commit <\/em># subimos os cambios \u00f3 repositorio<\/li>\n<\/ol>\n<p><em>uri_svn = https:\/\/svn.forge.morfeo-project.org\/svn\/freeswmaster\/trunk\/amaneiro\/perl-workshop\/<\/em><\/p>\n<p>Tam\u00e9n vimos c\u00f3mo construir e enviar parches no caso de non ter acceso \u00f3 repositorio directamente. A partir deste momento, estamos listos para colaborar en calquera proxecto!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Logo do \u00faltimo post onde introduciamos os conceptos b\u00e1sicos dun sistema de control de versi\u00f3ns, neste imos simular unha sesi\u00f3n de traballo habitual contra un proxecto de software libre. Para iso escollemos o noso obxectivo. Neste caso imos usar un c\u00f3digo que recupera perf\u00eds de usuarios e os artistas m\u00e1is escoitados da plataforma last fm. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-20","post","type-post","status-publish","format-standard","hentry","category-sw-libre-ferramentas"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/posts\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/comments?post=20"}],"version-history":[{"count":0,"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/posts\/20\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/media?parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/categories?post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/premio-pfcsoftwarelibre-2008\/wp-json\/wp\/v2\/tags?post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}