Alle indlæg af Tobias Hinnerup

Skab overblik før merge af branches i CVS

Anvendelse af versioneringssystemer af den ene eller anden art er med meget få undtagelser en god idé – hvad enten man arbejder som eneste udvikler på et projekt, er flere der altid arbejder på HEAD af et projekt eller i en af førnævnte konfigurationer har behov for at arbejde i flere branches af et projekt samtidig.

Der opstår imidlertid potentielt komplicerede situationer, når udviklingen på to eller flere branches på et tidspunkt skal flettes sammen og den resulterende kode enten idriftsættes eller benyttes som basis for fortsat udvikling: Der kan være sket ændringer i rigtig mange filer, ved mange forskellige mennesker hænder, i sammenhæng med vidt forskellige projekter og opgaver.

Det kan i den anledning være med til at skabe ro omkring processen, ved inden gennemførelse af fletning, at identificere hvilke filer der er ændret på flere branches – og kombinere denne oplysning med hvilke brugere der har været involveret i de givne ændringer, således at disse på forhånd kan foreberede sig på at håndtere eventuelle konflikter, og efterfølgende at være med til at bekræfte hvorvidt deres respektive ændringer også fungerer efter endt fletning.

Imidlertid er de data CVS kan levere ikke umiddelbart nemme at overskue. Heldigvis kan de med lidt assitance fra Excel relativt nemt beriges og behandles i en pivottabel, så det også for en personkreds med relativt lille kendskab til versionsstyringssystemer forekommer overskueligt, hvor stor en opgave der forestår ved et kommende merge.

cvs history -c -a -p yourRepositoryName >yourRepositoryName.txt

Ovenstående vil trække de informationer ud der er behov for, i form af fommits for alle brugere for et givent repository – og aflevere dem i en tekstfil i et format, der nemt kan importeres i Excel.

Ved import af filen genereret af CVS, vil Text Import Wizard med overvejende sandsynlighed træffe alle de rette valg. Således kan der blot kan vælges “Finish”, når dialogen dukker op ved åbning af filen.

Principielt burde cvs history kunne tage argumenter på formen “-D 2008-01-01”, og derved kun returnere informationer fra dén dato og frem – imidlertid viser praktiske erfaringer, at det kan være særdeles vanskeligt at fremprovokere denne opførsel i praksis. Når dette er tilfældet, er det nødvendigt – og i hvert fald ofte hensigtsmæssigt – at frasortere data der ligger før de branches der er interessante. Dette kan gøres ved at vælge alt, sortere efter kolonne B (Commit Date) og slutteligt at markere og slette de rækker der ligger før dén.

Ved indsættelse af en række i toppen af arket, anbefales følgende navngivning af kolonnerne:

  • Action
  • Commit Date
  • Commit Time
  • Unknown
  • Username
  • Revision
  • Filename
  • Path
  • Equals
  • Client

Med henblik på den videre behandling, indsættes umiddelbart efter kolonnen “Revision” en kolonne der navngives “Branch”. Ved kopiering beregnes værdien for samtlige række i den efter formlen:

Engelsk Excel: =IF(ISNUMBER(SEARCH(".";RIGHT(F2;2);1));LEFT(F2;LEN(F2)-1);LEFT(F2;LEN(F2)-2))

Dansk Excel: =HVIS(ER.TAL(FIND(".";HØJRE(F2;2);1));VENSTRE(F2;LÆNGDE(F2)-1);VENSTRE(F2;LÆNGDE(F2)-2))

Vær opmærksom på, at ovenstående formler ikke tager højde for revisioner højere end 99!

Formlen benytter sig af det faktum, at alt andet en det sidste ciffer i versionsnummeret i CVS angiver en branch, og fungerer ved gennem tekstuel manipulation at fjerne dette.

Hele arket kan derefter markeres, og guiden til indsættelse af en pivottabel kan kaldes.

Her trækkes felterne “Path”, “Filename” og “Branch” til “Row Labels”, feltet “Username” til “Column Labels” og feltet “Action” til “Values”.

Derved vil genereres et ark, der lister hver filnavn under det eller de branches den indgår i, med angivelse af hvilken bruger der har lavet rettelser i hvert branch. Filerne der er interessante i forbindelse med et merge vi være nemme at finde, idet disse vil indgå i flere branches, og dermed have to eller flere linier over filnavnet.

Hermed en efterlysning af andre potentielt interessante efterbehandlingsmetoder og mål, baseret på data trukket ud af CVS.