Está en la página 1de 33

LoqueyosdeSVN

zarate.tvdandolachapa.comloqueyosede.com TraduccinporCayGarridoventdaval.com

JuanDelgadoZrate

LoqueyosdeSVN1/33

ndice

Introduccin Aviso Agradecimientos Licencia IntroduccinaSVN Definicin CmofuncionaSVN Glosario TrabajandoconSVN InstalandoSubversion Creandoturepositorio RutinadiariaconSVN Checkout Addycommit Update(actualizar) Revert(deshacercambios) Tag(etiquetar) Conflictos CosasmolonasquehacerconSubversionundomingoporlamaana ActualizarWordPressdeformasencilla TweeteatuscommitsusandoSVNhooks AadirinformacindeSVNatusarchivos IntegrarSVNconsistemasdegestindebugs Enlaces ClientesSVN Documentacin Tutorialesyotrosartculos Miscelnea

Aviso
Estedocumentonoestterminadoanestendesarrollo,meencantararecibirsugerencias, mejorasocorrecciones. Tenedencuentaquenosoyningnexpertoencontroldeversionesypuedoestarequivocado. Recomiendoveresteartculomscomolasexplicacionesdeuncompaerodetrabajoquelleva unosaosusandocontroldeversiones,nimsnimenos.Sivesalgnerror,porfavorponteen contactoconmigoencuentamearrobazarate.tv. LoqueyosdeSVNestconcebidocomopuntodeentradaparausuariosnovelesaunquepuede tambinayudarausuariosintermedios.Dudomuchoqueleenseealgoausuariosavanzados.

LoqueyosdeSVN2/33

Agradecimientos
Graciasatodaslaspersonasquecompartenconocimientodeformagratuita.Internetsesale.

Licencia EstaobraestbajounalicenciaReconocimientoCompartirbajolamisma licencia2.5EspaadeCreativeCommons.Paraverunacopiadeestalicencia, visite http://creativecommons.org/licenses/bysa/2.5/es/ o envie una carta a CreativeCommons,171SecondStreet,Suite300,SanFrancisco,California 94105,USA.
OenlawebdeCreativeCommons: http://creativecommons.org/licenses/bysa/2.5/es/ NOTA:EstelibroesunatraduccindeloriginalWhatIknowaboutSVNquesepuedeencontraren: http://zarate.tv/articles/whatiknowaboutsvn/ Esoimplicaquealgunosprrafosopalabraspuedensonarextraosyaquefueronescritos originalmenteeningls.Esosincontarconelabundantenmerodeextranjerismosquepueden convertirlalecturaencastellanoenmenos...natural. Traduciressiempreunatareacomplicada,citandoamrAlbertoRomero: Traduceinterfaces,noprrafos.Sialguienenmisituacin(hola,nosoytraductornibilinge nitengoexperienciaadaptandounprogramaaotroidiomay,bueno,enrealidadloqueme apeteceesirmealaplaya)mepidieraunconsejo,serase:cuidadoconponerseatraducir palabraporpalabraoprrafoporprrafo.Siteatascasconuntexto,pruebaacogeruntrozoms grandedetexto,omejor,pregntatealgocomosiestapantallahablaraingls,cmopediraa lapersonaqueestenfrentequehicieraaquelloparaloquelapantallaestdiseada? Hemosintentadoaplicaresto,peronosiempreesfcil.Aceptamosconhumildadcualquierconsejo uobservacinsobreeltema.Gracias!

LoqueyosdeSVN3/33

Introduccin
DelaWikipedia: VersionControlSystems(VCS)orSourceCodeManagement(SCM)isthemanagementof multiplerevisionsofthesameunitofinformation. Traduccin: SistemasdeControldeVersiones(VCS)oGestindeCdigoFuente(SCM)eslagestinde multiplesrevisionesdeunamismaunidaddeinformacin. Yporunidaddeinformacinentendemosficheros.as,.fla,imgenes,sonidos,etc...Cualquier tipodeficheropuedesersometidoacontroldeversiones. Utilizarcontroldeversionessuenabien,peroenrealidadsereduceaBUSCARCULPABLES:

(Crditosdelafoto) UsandocontroldeversionespuedessaberQUINhizoQU,CUNDOyPORQU.Estoes especialmentetilporejemploalsolucionarbugs.Muchasveceselcdigonohablaporsimismoy algoquenoesobviopuededejartemirandoelmonitorpreguntndoteporqusehaceesallamada. Bueno,abretuclientedecontroldeversionesyaveriguaquinlaaadi.Ahorayapuedesenviarle alresponsableunemailypreguntarle. ElcontroldeversionesestambincomounaMQUINADELTIEMPOquepuedesusarpara volveratrs.Dehecho,aquhayunafotodeunodelosprimerosclientesdeunsistemadecontrolde versiones:

LoqueyosdeSVN4/33

Elcontroldeversionestedejavolveraversionesanterioresdetusarchivos.Nosloaversiones dondeesemalditobugnoestabapresente,sinotambinporejemploalconjuntodeficherosexactos queenviasteauncliente(silosetiquetasteensumomento,porsupuesto,loveremosmsadelante). Haymuchossistemassistemasdecontroldeversionesdisponiblesperosobrepasaelambitodeeste documentorevisarlostodos.NoscentraremosenSubversionoSVNporqueesunodelosVCSms simplesyconocidos.Siquieresmsinformacinsobreotrossistemasylasdiferenciasentreellos chaleunojoalaseccindeEnlaces. Aunqueelcontroldeversionesdemuestratodosupodercuandosetrabajaenequiposestambien muytilsitrabajassolo.Yaseacomodesarrollador,diseador,ejecutivodecuentas,etc...Sialguna vezhasvistoentuscarpetasalgocomo:

Propuesta_Final.doc Propuesta_Final_modificaciones.doc Propuesta_Final_modificaciones_b.doc Propuesta_Final_enviado_al_cliente.doc ...

Entoncesnecesitascontroldeversionesyaquevaagestionaresasdiferenciasdeunaformamucho mslimpia.Yloharmuchomejor.AlgunassuitesdeoficinacomoGoogleDocsestnempezando aintegrarcontroldeversionesautomticoporloqueseguroquealgoparecidoaparecerenOfficeu OpenOfficeenunfuturonomuylejano.

CmofuncionaSVN
SVNesunVCScentralizado(enlugardedistribuido)loquesignificaquehayunsitiocentral (llamadorepositorioorepo)quehacedecopiamaestra.Lagenteaccedealrepositoriocentraly obtieneunacopialimpiadeloquehayaenl.Unavezhechaslasmodificacionessesuben
LoqueyosdeSVN5/33

(commit)alrepositoriohaciendoposiblequeelrestodepersonaslasobtengandespusalactualizar. Alrepositorioseaccedeconuncliente.Clienteshaymuchosydependedecadaunoelegirelque msleguste.SitrabajasconWindowslomasseguroesqueusesTortoiseSVN.SiusasunMac puedequeVersions.YsiestsenLinuxprobablementelalneadecomandosaunquetambinhay clientesgrficoscomoRapidSVN.Prubalosyeligeelquemsteguste. AlserunVCScentralizadoSubversionnecesitaaccesoalrepositorioparaciertastareas.Esto significaquesiturepositorioestonlinenecesitarsconexinainternetparapoderhacercommits, updates,etc...

Glosario
Aprenderausarunodelosclientesestbien,peroesmuchomsimportanteaprendercmo funcionarealmenteSVN.Cadaclientetienesusprosycontrasyalgunossonmejoresqueotros.Los puedesvercomonavegadores,loquerealmenteimportaesaprenderHTMLnoIE(bueno, especialmentenoIE). AsquelomejoresquetetomesunmomentoparaaprenderlaterminologabsicadeSVN,lacual, porcierto,tienemuchoencomnconotrossistemasdecontroldeversiones:

Checkout:Obtienerunacopialimpiadelrepo.Normalmentesehaceunavezporproyecto. Commit:Subetuscambiosalrepositiorio.Yporcambiosnosreferimosacualquierdiferencia entretucopialocalyelrepositorio:agregar/borrar/renombrararchivosocarpetas,modificar ficheros,etc...CualquiercambioquehagasatucopialocalNOllegaralrepositoriohasta quehagasuncommit. Add(agregar):Siquieresagregarnuevosficherosalrepoprimerohayquehacerunadda travesdeSVN.Despuscommit. Update(actualizar):Updateactualizatucopialocalconlosultimoscambiosdelrepo.SVN intentarcombinarofusionarficheroscuandoseaposibleperopuedehaberconflictos(ms informacinenlaseccinConflictos). Revert(deshacercambios):Cuandoquieresdeshacertedeloscambioslocalesyobteneruna copialimpiadelrepo. trunk(tronco),tags(etiquetas)ybranches(ramas).UnrepositoriodeSVNtienenormalmente3 carpetas/seccionesdiferentes: Eltrunk(tronco)esdondesehacenlamayoradeloscambios,dondesehaceeltrabajo diario.Normalmenteseleconsiderainestableenelsentidodequeelcdigonoseha probadoonotodaslascaractersticasestanimplementadas. tags(etiquetas).Cuandoeltrunkesestableosehallegadoaunhitoimportantesesuele crearunaetiqueta.Puedesverlasetiquetascomofotosdeunproyecto.Unaveztomadaes fija,nosedeberanhacercambios.Tagstpicosson0.3,RC1,etc.,perosiests inspiradopuedesusartagscomoGreatWhite,CortoCircuito,etc. branches(ramas).Cuandoundesarrolladornecesitaimplementarunacaractersticade ciertamagnitudquepuedeinterferirdemasiadoconeltrunkperonoquierehacerloenlocal (porejemploporquelacaracteristicaseaimplementadaenequipo)sepuedecrearunarama. Alcontrarioquelasetiquetas,losdesarrolladoresactualizancontinuamentelasramashasta queelproblemaestresueltoolanuevacaractersticaimplementada.Unavezresueltola
LoqueyosdeSVN6/33

ramasefusionaocombinaconeltrunk.Esoss,SVNesconocidopornocombinarramas muybien,portantosesueleevitar.Noeselcasodeotrossistemasdecontroldeversiones.

TrabajandoconSVN InstalandoSubversion
EnWindowsTortoiseSVNinstalatodolonecesario,asquedeberasersuficiente. LamayoradelasdistribuicionesdeLinuxvienenconelclienteporlneadecomandosinstalado,lo mismoqueMacOSX.Sinembargo,siprefieresunclientegrfico,puedesencontraralgunosenla secciondeEnlaces.

Creandoturepositorio
CrearunrepositorioSVNesmuy,muyfcil.LosrepositoriosSVNNOnecesitanunservidor,slo espacioeneldiscoduro.Tambinfuncionanbastantebienencarpetascompartidasenred. UsandoTortoisesimplementehazclickconelbotnderechoenunacarpetavacayselecciona TortoiseSVN>Createrepositoryhere:

LoqueyosdeSVN7/33

Yyaest,esasdesimple.ElcomandoSVNessvnadmincreate: svnadmincreateREPO_PATH REPO_PATHdebeserunarutarealeneldiscoduro,nounaURL.AlgoascomoC:\repos\project1 /home/user/repos/project1. Siquieresteneraccesoalrepositoriodondeseaqueests,sinunaconexionVPN,necesitars ponerlobajounservidorApache.MsinformacinenlaseccindeEnlaces. Unavezqueelrepositoriohasidocreado,debescrearmanualmentelascarpetastrunk,tagsy branches.Hazclickconelbotnderechoenlacarpetaqueacabasdecrear(yqueahoraestllena decosasinternasdeSVN)yselecciona"Repobrowser":

LoqueyosdeSVN8/33

Ahorahazclickenladireccinsuperioryselecciona"Createfolder":

LoqueyosdeSVN9/33

Pon"trunk"(sincomillas)comonombre,ponuncomentario("Configuracininicial"bastarsino tevienenideas)ypresionaOK.Repiteelmismoprocesoparatagsybranches.Alfinaltu repositoriodebequedaras:

LoqueyosdeSVN10/33

Yyatienesturepositoriolistoparatrabajar.

RutinadiariaconSVN
Checkout

Unaveztengasturepocreadoylisto(ositieneslaURLdelproyecto)loprimeroeshacerun checkout:

LoqueyosdeSVN11/33

Primerocreamosunacarpetasobrelacualtrabajar(sernuestracopialocal).Luegohacemosclick conelbotnderechosobreellaybuscamoslacarpetaconelrepositorioquecreamosenelpaso anteriorusandoelboton...alladodelcampo"URLofrepository":

LoqueyosdeSVN12/33

SeleccionalacarpetaypresionaaOK:

LoqueyosdeSVN13/33

Unavezseleccionado,confirmaqueestashaciendoelcheckoutdeltrunk.Situclientenoha agregado/trunkagrgalotmismo:

LoqueyosdeSVN14/33

Yaest:)Ahoratienesunacopialimpiadelproyectoentucarpetalocalparapoderempezara trabajar.

LoqueyosdeSVN15/33

ElcomandoSVNescheckout: svncoREPO_PATH/trunk Comohasbajadotupropioproyectovacosolamentehabrunacarpetaocultallamada.svn (quizasnolaveas,dependiendodelaconfiguraciondetusistema).EnesacarpetaSVNguardala informacinquenecesitaparatrabajar.Porfavor,escribeestocuantasvecesnecesites: *LAPRIMERAREGLADELCLUBSVNESNOTOCARLASCARPETAS.SVN. *LASEGUNDAREGLADELCLUBSVNES*NO*TOCARLASCARPETAS.SVN.

LoqueyosdeSVN16/33

Deverdad,nosetocan.
Addycommit

Paracontinuarconelejemplo,creaunficherodetextoconcualquiercontenidoygurdaloenla carpetaenlaquehicisteelcheckout.ComoSVNnosabequedebeseguirlosuiconoaparececonun smbolodeinterrogacin:

LoqueyosdeSVN17/33

ParaagregarloalrepositoriodebesagregarlomedianteSVNparaquestesepaqueesunfichero quedebecontrolar:

LoqueyosdeSVN18/33

Estomarcarelficherocomolistoparasersubidoalrepositorioyeliconocambiaraunsigno+. IMPORTANTE:elficheroaunNOhallegadoalrepositorio,debeshaceruncommit:

LoqueyosdeSVN19/33

Despusdehacerelcommitelficherotendruniconoverdequenosdicequenuestracopialocales idnticaalaquehayenelrepositorio:

LoqueyosdeSVN20/33

Yyaest,listo.Esteprocesoeslomismoqueejecutarloscomandosaddycommit: svnaddHelloWorld.txt svncim"Addingmyfirstfile!"HelloWorld.txt Unanotasobrequycundodebeshaceruncommit: Whenyoucommitachangetotherepository,makesureyourchangereflectsasinglepurpose: thefixingofaspecificbug,theadditionofanewfeature,orsomeparticulartask Traduccin: Cuandohacesuncommitdeuncambioalrepositorioasegratedequetuscambiospersiguenun nicopropsito:arreglarunbug,implementarunanuevacaractersticaoalgunatareaen particular. SacadodeSubversionbestpractices.

LoqueyosdeSVN21/33

Tambinesimportanteverladifereciaentreunmensajedelogbuenoyunomalo: MALO bugarreglado BUENO Fixissue#1729:Quenosecaigaporquefaltaunfichero. *get_editor.c (frobnicate_file):Comprobarqueexisteelficheroantesdefrobnicar, Recibeunarutaabsolutaenvezdeunarelativa. *do_thing.c (frobnicate_things):Actualizalasllamadasafrobnicate_file. SacadodeOSCON2004,SVNbestpractices.
Update(actualizar)

Sinotrabajassolonecesitarsbajarlosltimoscambiosqueotrosmiembrosdelequipohayan hecho:

LoqueyosdeSVN22/33

QueserialomismoqueusarelcomandoSVNupdate: svnupdate IMPORTANTE:nosepuedenhacercommitsdeficherosamenosquesetengalaltimarevisin. Esdecir,sialguienhizoalgncommitdelmismoficheroqueestseditandomientrashacas cambios,estsobligadoaactualizartucopiaantesdehacercommitdelostuyos.


Revert(deshacercambios)

Avecesdespusdemodificarunficherodecidesquetuscambiosnosoncorrectosyquieresvolver alaversindelrepositorio.Parahacerestousaelcomandorevert:

LoqueyosdeSVN23/33

Estodesharloscambiosdetucopialocalydejarlaultimaversiondelarchivoqueestenel repositorio.Esequivalenteaejecutarelcomandorevert: svnrevertFILE_PATH


Tag(etiquetar)

Etiquetarescomosacarunafoto,unainstantneadelproyecto.Normalmenteunoetiquetael repositoriocuandosehaalcanzadounhitoimportante,ocuandosequierecrearunpuntode retorno. LasetiquetasdeSubversion(ylasramas)nosonmsquecopiasenunmomentoespecfico.Para crearuna,hazclickconelbotnderechoporejemploenlarazdetucopialocalyselecciona TortoiseSVN>Branch/Tag:

LoqueyosdeSVN24/33

Estocrearunacopiadetucopialocaldondetdigas.Porejemplo,vamosconalgosencillo,0.1:

LoqueyosdeSVN25/33

NOTA:sepuedeseleccionarlacarpetadelaetiqueta(tag)usandoelboton...osimplemente modificandoelcampoToURLamano,agregandoelnombredelanuevaetiquetaalfinal. PresionaOKylisto. Parahaceruncheckoutdeunaetiqueta(tag)concretaslohayquereferirseaellaalhacerel checkout:

LoqueyosdeSVN26/33

Enlugardebajareltrunksebajalaetiquetaespecificada. Importante:nohaycomandotagenSVNyaquelasetiquetas(tags)yramas(branches)sonslo copias.Portanto,paracrearunaetiquetahayqueusarelcomandocopy: svncopySOURCE_PATHDESTINATION_PATH Algoas: svncopy.REPO_PATH/tags/0.1 El.significadirectorioactual. LasetiquetassonMUYtilescomopuntosderetornoynohayquetenermiedoausarlas.Por ejemplo:


Etiquetaturepocuandoleenviesalgoauncliente. Etiquetaturepocuandoliberesunreleasedetuproducto.

Conflictos

Cuandoactualizastucopialocal,SVNbajatodoslosficherosnuevosquesehayanaadido.Adema
LoqueyosdeSVN27/33

tambinactualizarlosficheroqueyatengas.ParaactualizarficherosexistentesSVNnecesita combinarofusionarelrepositoriocontucopialocal.Avecesfusionarautomticamentelosficheros noesposibleporquehayconflictos.Lamayoradelasvecesestosconflictosvienenporquedos personaseditaronlamismalneadelmismoficheroconinformacindiferente. Despuesdeunupdateconconflictosversalgoas:

YaqueSVNnopuederesolverelconflictodeformaautomticatendrsquehacerlomanualmente. PuedesusarTortoiseMerge(Tortoise>Editconflicts)ohacerloamano.Lohagascomolohagas, tendrsquedecidirqucambioeselbueno,SVNnopuedehacerloporti.Unavezhecho,resuelve elconflicto:

LoqueyosdeSVN28/33

Esodeberaeliminarlosficherosadicionalesyyapodrshacercommitsdenuevo.Estoeslomismo queusarelcomandoresolved: svnresolvedFILE_PATH

LoqueyosdeSVN29/33

CosasmolonasquehacerconSubversionundomingoporlamaana
AcontinuacinunaunapequealistadecosasavanzadasquesepuedenhacerconSubversion, algunasmssencillasqueotras.LamayoratratansobreenlazarautomticamenteSubversioncon otrastecnologasutilizadaseneldesarrollodeSoftware.Lasmismascosassepuedenhaceramano, peroalautomatizarelprocesoteasegurasdequea)noteolvidasdehacerlo,b)lohacesbienyc) ahorrastiempo.

ActualizarWordPressdeformasencilla
Sitienesunblogseguramentesabesquemanteneractualizadalaversinesunatareabastante aburrida.LoschicosdeWordpresslosabenyporesotienenuntutorialmuyfacilitosobreello: http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion AnoserquequierastrastearconelcdigodeWordpress(msalldelainstalacintpica)elije instalarunaversinestable.

TweeteatuscommitsusandoSVNhooks
NOTADELTRADUCTOR:(Tuiteatuscomitsusandoesbienjuksesunafrasequeapestaen castellanoperonotengounamejortraduccin) SabesquepuedesgenerarunTweetcadavezquehacesuncommit?Loschicosdevi.vutecuentan cmo.NecesitasusarSVNhooks(msinformacinenlaseccindeEnlaces)quenosonmsque scriptsqueseejecutanautomticamentepordiferenteseventos(commit,crearunaetiqueta,etc.) UsandoSVNhookspuedesllamaraunscriptPHP(oJavaounarchivobat,dependedelsistema operativosobreelqueestelrepositorio)queseconectaaTweetercreandounTweetconla informacindelcommit.Elprocesoesalgocomoesto: friki>commit>hook>script>tweet>elrestodefrikisrecibenlanotificacin Msinformacinaqu: http://remeseiro.com/metadata/index.php/2007/10/25/enviandocommitsdesubversionatwitter/ http://quarkblog.org/2007/02/06/subversionhooks/

AadirinformacindeSVNatusarchivos
EsposibleconfigurarSVNparaqueinyecteinformacin(nmeroderevisin,quinhizoel commit,etc.)atusarchivos. Estoporejemplopermiteconoceresosdatossimplementemirandoelcdigo,nohacefaltaarrancar elclientedeSVN.Msinformacin:
LoqueyosdeSVN30/33

http://svnbook.redbean.com/en/1.0/ch07s02.html

IntegrarSVNconsistemasdegestindebugs
AlgunosclientesdeSVNpermitenenlazarunrepositorioyunsistemadegestindebugs.Ms informacin: http://blog.platinumsolutions.com/node/102

LoqueyosdeSVN31/33

Enlaces
AlgunosdelosenlacestocantemasavanzadosdeSVNqueseguramentenonecesitesahoramismo. Miconsejoesquelosleasdetodasformasporqueayudanatenerunavisinmsampliadeloque sepuedehacer. Estosonsloalgunosdelosenlacesqueherecopiladoescribiendoestetutorial.Comodijeal principio,muchasgraciasatodoslosquecompartenconocimientodeformagratuita.

ClientesdeSVN
TortoiseSVN(Windows):http://tortoisesvn.tigris.org RapidSVN(multiplataforma):http://rapidsvn.tigris.org SCPluing(Mac):http://scplugin.tigris.org Cornerstone(Mac,depago):http://www.zennaware.com/cornerstone Syncro(multiplataforma):http://www.syncrosvnclient.com Versions(Mac,depago):http://www.versionsapp.com

Documentacin
SitiooficialdeSubversion: http://subversion.tigris.org LibrooficialdeSubversion(esgrandeperovalelapenaparaconsultar): http://svnbook.redbean.com ListadodeloscomandosSVN: http://svnbook.redbean.com/en/1.1/ch09.html SVNhooks: http://svnbook.redbean.com/en/1.1/ch05s02.html AgregarpropiedadesdeSVNatusarchivos: http://svnbook.redbean.com/en/1.0/ch07s02.html IntegrarSVNyApache: http://svnbook.redbean.com/en/1.1/ch06s04.html ArtculodelaWikipediasobresistemasdecontroldeversiones: http://en.wikipedia.org/wiki/Source_control ArtculodelaWikipediasobreSubversion: http://en.wikipedia.org/wiki/Subversion_(software)

LoqueyosdeSVN32/33

Tutorialesyotrosartculos
TrucosconSVNhooks: http://www.petefreitag.com/item/244.cfm http://chicken.wiki.br/svnpostcommithooks IntegracindeSVNconsistemasdecontroldebugs(Bugzilla,Mantis,etc): http://blog.platinumsolutions.com/node/102 http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/doc/issuetrackers.txt(user:guest,password: empty) CollaborateandconnectwithSubversion: http://www.alistapart.com/articles/collaboratewithsubversion ListadodetutorialessobreSVN: http://www.subversionary.org/taxonomy/term/14 MejoresprcticasconSubversion: http://svn.collab.net/repos/svn/trunk/doc/user/svnbestpractices.html 5SVNbestpractices: http://www.iovene.com/5svnbestpractices/ ClienteporlneadecomandosparaWindows(sinTortoise): https://www.projects.dev2dev.bea.com/Subversion%20Clients/CommandLineSVN.html

Miscelnea
Putty,unclienteSSHgratuitoparaWindows(necesarioporejemploparainstalarWordpresscon SVN.PuedequeprimerotengasquecontactarcontuhostingparaobtenerdatosdeaccesoSSH): http://www.chiark.greenend.org.uk/~sgtatham/putty/ ListadodeempresasqueofrecenhostingSVNgratuitoydepago: http://www.subversionary.org/hosting/hostingservices YnosemeolvidaquetengoquepedirpermisoaAngusBlacksheepparausarsufotoperonotengo unacuentadeYahoo!Alguienmeechaunamano? http://www.flickr.com/photos/43933977@N00/1455304619/

LoqueyosdeSVN33/33

También podría gustarte